您的位置:首页 > 其它

支付宝接入总结

2018-03-22 18:36 134 查看
1.分类

目前支付宝支付分类为:

APP支付:商家APP向支付宝APP发起请求,使用SDK,支付方法为alipay.trade.page.pay

手机网站支付:手机网页发起支付请求,貌似可以get也可以post,ajax祝你幸福,效果是首先唤起支付宝APP,不行转为网页收银台帐号密码支付,支付方法为alipay.trade.wap.pay

电脑网站支付:电脑网页发起支付请求,转向网页收银台,可以帐号密码支付也可以扫码支付,支付方法为alipay.trade.page.pay

支付时统一需要向后台获取签名参数,然后发起请求

但是支付宝还有一些其他接口,alipay.trade.pay,alipay.trade.create,alipay.trade.precreate等,这些接口主要用户线下扫码或者条码支付,虽然能生成二维码,但是不是给网页支付使用的,网页支付是扫支付宝网页收银台的码

2.请求方式
在文档、demo当中看到过post、get请求方式,事实上都是可以的,但是有一个字符转义的问题,我遇到的情况是:

前端form表单提交post请求,成功

后端使用nodejs的request库提交post请求失败,一直签名失败,我直接拼接的签名字符串,没有url编码!!!!!没有url编码!!!!

后端使用库发出get请求,查询字符串用qs库生成,一次成功

所以说,与其去测试如何对参数进行转义,不如就使用查询字符串吧,反正查询字符串肯定是要url编码的,但是这个过程应该比较统一,没有什么异议

3.签名方式

目前签名方式没有什么异议,还是支付宝那一套,过滤空值,排序,拼接,签名,base64是不用说的,这些对于每个接口都是一样的

4验签

支付宝文档没有明确说明验签方式,可能会按照签名方式去推断验签方式,而事实上支付宝不同情况验签方式是不一样的

异步回调:与签名方式一样,而且回调mime为application/x-www-form-urlencoded

退款、退款查询、关闭:这些接口响应与回调不一样,mime类型为text/plain,但是值为JSON字符串,解析为对象后为

退款:

alipay_trade_refund_response:包含了退款响应的有效载荷

sign:签名

退款查询:

alipay_trade_fastpay_refund_query_response:包含了退款查询的有效载荷

sign:签名

关闭:

alipay_trade_close_response:包含了关闭订单响应的有效载荷

sign:签名

面对这个签名的验签方式是,将有效载荷转换为JSON字符串,然后对JSON字符串验签

5.密钥

使用openssl生成的pem文件是有头、尾的,如-----BEGIN PUBLIC KEY-----,支付宝上传公钥是要求去掉头尾、空格、换行等,其中密钥字符串中换行有没有无所谓,不影响签名结果,但是使用nodejs签名时这个头尾不能去掉,去掉签名会出错

6编码

回调请求:过程中一开始接收到utf-8编码,没问题,但是后来出现了charset为GBK的情况,而nodejs的body-parser中间件不支持GBK,直接报错,这个情况只能修改库文件,将报错的代码注释,不影响验签等,但是不知道为何编码会变为GBK

请求响应:支付宝的退款、退款查询响应都是GBK格式的,在nodejs中需要使用iconv-lite对Buffer进行解码,才能得到正常的响应
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: