支付宝接入总结
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进行解码,才能得到正常的响应
目前支付宝支付分类为:
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进行解码,才能得到正常的响应
相关文章推荐
- 接入支付宝支付功能思路总结
- 支付宝-银联-微信支付接入总结
- APP内支付的接入总结(支付宝&APP STORE)
- 移动支付sdk技术总结-3(支付宝接入)
- 工作总结—支付宝SDK接入之如何填坑
- 支付宝最新sdk接入总结
- Android微信支付、支付宝接入总结
- Android 支付宝以及微信支付快速接入流程
- iOS接入支付宝(支付功能)
- Android支付接入(一):支付宝
- 支付宝支付接口对接的总结
- 国际版支付宝退款(forex_refund)接口总结
- 调用微信和支付宝第三方接口方法总结
- 支付宝接口开发总结
- ReactNative接入支付宝支付
- Android支付——支付宝支付总结
- Node 框架接入 ELK 实践总结
- 总结下在离开教育网后公网各种接入IPV6的方法
- iOS 支付宝详细集成总结
- 支付宝集成核心问题总结