近期接到一个任务就是接入手机网站支付接口
看文档比之前的支付宝接口多了一步授权接口 发起请求过程为
1. 获取授权码
2. 发起交易请求
文档里有几个坑 在这里我重要提醒下
1. 请求顺序 普通post 请求是不在乎顺序的 参数在前在后 都无所谓 但支付宝接口必须按照特定的顺序
顺序错了 会提示sign 错误 这个挺坑人的 废话不多说 上代码
function buildRequestParaToString(para_temp) { //待请求参数数组 var para = core_funcs.argSort(buildRequestPara(para_temp)); //把参数组中所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串,并对字符串做urlencode编码 var request_data = 'req_data=' + qs.escape(para.req_data) + '&service=' + qs.escape(para.service) + '&sec_id=MD5&partner=' + para.partner + '&req_id=' + para.req_id + '&sign=' + para.sign + '&format=xml&v=2.0'; return request_data; }
请求顺序必须是这样的才可以 否则支付宝不认
2 . 获取授权码 支付宝这点做的挺坑人的 一大串字符 去解开 然后再解析xml 要换成json 会一劳永逸
本人采用了比较偷懒的做法
var xml2js1 = require("xml2js"); var body1 = unescape(r.body.split('&')[0].toString().replace('res_data=', '')); var parseString = xml2js1.parseString; var json1 = parseString(body1, function (e, v) { console.log(e,v) ; callback(e, v.direct_trade_create_res.request_token[0]) } );
至此两大坑解决了 剩下的 就是自己业务逻辑的事情了
3 . 发起交易请求 如一所示 那样的顺序才可以 否则故障依然
支付宝之业务通知接口
验证接口:
function create_direct_pay_by_user_return(_get) { var prestr='service=alipay.wap.trade.create.direct&v=1.0&sec_id=MD5¬ify_data='+_get["notify_data"]; var md5 =md5_f.md5Sign(prestr,alipay_config.key); if(_get["sign"]==md5) { return true ; } else { return false ; } }
_get 为post 回来的所有参数
验证完 就是用上面2 的方法 将参数转换为json 之后便是自己业务逻辑处理的问题了
总结:
在nodejs里只要转换成Json 任何数据都比较好处理
大家有什么问题 可以发邮件给我
niefengjun@niefengjun.cn
你打算打赏多少钱呢?
(微信扫一扫)