如何将PayU OAuth接口的curl POST请求转换为可用的JavaScript请求代码
问题核心原因
你提交的JavaScript代码运行失败,是因为参数传递格式错误:PayU的OAuth授权接口要求传入application/x-www-form-urlencoded格式的表单参数,你当前用JSON.stringify()将参数序列化为了JSON格式,接口无法正常解析。另外你的代码没有对返回的响应体做JSON解析,也会导致拿不到预期的token数据。
第一种REST API请求的修正代码
fetch('https://secure.payu.com/pl/standard/user/oauth/authorize', { method: 'POST', // 用URLSearchParams自动生成form-urlencoded格式的请求体,不需要手动设置Content-Type,fetch会自动补全 body: new URLSearchParams({ 'grant_type': 'client_credentials', 'client_id': '145227', 'client_secret': '12f071174cb7eb79d4aac5bc2f07563f', }) }).then(res => { if (!res.ok) { throw new Error("Fetching payU failed, please try again later!"); } // 解析响应体为JSON格式,才能拿到token字段 return res.json(); }).then(data => { console.log('PayU授权返回数据:', data) // data里就包含你需要的access_token字段 return { payUdata: data } }).catch(err => { console.log('请求出错:', err); });
第二种SDK对应请求的转换方法
第二种请求只是多了指定的请求头和额外的参数,直接按照下面的写法调整即可,记得把占位符替换成你自己的实际参数:
fetch('https://secure.payu.com/pl/standard/user/oauth/authorize', { method: 'POST', headers: { "Cache-Control": "no-cache" }, body: new URLSearchParams({ 'grant_type': 'trusted_merchant', 'client_id': '[PayU提供的client_id]', 'client_secret': '[PayU提供的client_secret]', 'email': '[用户邮箱]', 'ext_customer_id': '[商户系统内的用户ID]' }) }).then(res => { if (!res.ok) { throw new Error("Fetching payU failed, please try again later!"); } return res.json(); }).then(data => { console.log('Trusted Merchant授权返回:', data) return { payUdata: data } }).catch(err => { console.log('请求出错:', err); });
注意如果是前端浏览器直接调用该接口,大概率会遇到跨域限制,PayU的这类授权接口本身就是设计给服务端调用的,建议你把请求逻辑放到后端服务中实现,避免跨域和密钥泄露的风险。
内容的提问来源于stack exchange,提问作者seven
相关产品推荐
相关产品推荐

