简介
此片文章介绍对接微信、支付宝所遇到的问题以及经验之谈。
准备工作
支付类型 |文档 |对接难易程度 |文档地址
--|---
支付宝 | 文档写的不错 | 易 | https://docs.open.alipay.com/api_1/alipay.trade.fastpay.refund.query
微信 | 不想说了 | 难(也不能说难应该是坑)|https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_1
熟悉支付流程
支付宝
微信
[详情文档请参考]
有萝卜有坑
序号 | 类型 |问题描述
--|---
No1 | 支付宝 | 支付宝秘钥使用pkcs8加密方式,以及相关参数key配置。
No2 | 微信 | 微信key值一定要使用微信支付的key,不要用平台key。
No3 | 微信 | 一直报签名错误,下面详细介绍。
No4 | 微信 | 得到的签名一定要转MD5,然后在将其转换成大写,并且生成MD5必须要以UTF-8的方式。
No5 | 微信 | 订单金额需要转换成以分为单位。
No6 | 微信 | 且值为空的参数不参与签名。
No7 | 微信 | 参数需按ASCII码从小到大排序。
No8 | 微信 | 第二次签名认证参数已消息的格式。
No9 | 微信 | 第二次签名参数package,需要赋值Sign=WXPay
一句签名错误概括全部错误信息,我就弱弱的问句错误码有用么?
“验证签名错误”第一反应肯定是检测签名是否正确,[官方验证签名地址]。
然而,这才刚刚开始,签名正确了还是特么的报“验证签名错误”。特么的把以上几点全部检测了“有萝卜有坑”,然并卵。上面说了<span style="color:red">签名验证有两次,这是第二次验证错误</span>,最后发现<span style="color:red">【传入微信端的时间戳参数 ios需要32位 安卓需要10位】</span>,笑哭。首先看见“验证签名错误”,肯定是服务端问题,然而呢。。。
签名两次重要参数
第一次签名参数
得到sign并赋值pay.setSign(sign) ;接下来就是将pay对象转换成xml,调用统一下单接口进行统一支付,并将统一支付返回的xml转换成bean。
notify_url //回调地址
time_start //交易起始时间
time_expire //交易结束时间
spbill_create_ip //IP地址
trade_type //交易类型
limit_pay //no_credit--指定不能使用信用卡支付
appid //微信开放平台审核通过的应用APPID
mch_id //微信支付分配的商户号
nonce_str //随机字符串,不长于32位。
sign_type //签名类型,目前支持HMAC-SHA256和MD5,默认为MD5
body //商品描述交易字段格式根据不同的应用场景按照以下格式:APP——需传入应用市场上的APP名字-实际商品名称,天天爱消除-游戏充值。
out_trade_no //订单号
total_fee //交易金额默认为人民币交易,接口中参数支付金额单位为【分】,参数值不能带小数。
sign //根据以上数据生成签名
第二次签名参数
统一下单成功会返回微信预支付订单号prepay_id,我们需要根据这个prepay_id进行二次签名,二次签名所用参数如下(不包括paySign)。
noncestr //随机字符串
appid //微信开放平台审核通过的应用APPID
timestamp //就是这B,传入微信端的时间戳参数 ios需要32位 安卓需要10位
partnerid //商户号
package //Sign=WXPay
prepayid //微信预支付订单号prepay_id
sign //根据以上数据生成签名
实例代码后续上传GitHub
第三方文档能不能写专业第一,之前和中兴、华为对接一样,特么的文档写的一塌糊涂。