"签名: 商户后台和微信支付后台根据相同的密钥和算法生成一个结果,用于校验双方身份合法性。签名的算法由微信支付制定并公开,常用的签名方式有:MD5、SHA1、SHA256、HMAC等。"-- from weixinDoc
===> "r: 所以商户后台和微信支付后台指什么呢? "
“
商户后台系统 商户后台系统是商户后台处理业务系统的总称,例如:商户网站、收银系统、进销存系统、发货系统、客服系统等。
” 常用参数
appid: 唯一标识
mch_id: 微信支付分配的商户收款账号 // 微信支付商户号
key: 签名密钥 // 仅保留在商户系统和微信支付后台,不可在客户端存储(r: 断章取义了,是不可在其他客户端存储--on 10th,March,2016)
secret: appid对应的接口密码 // 获取acess_token时使用
“在微信支付中,先通过OAuth2.0接口获取用户openid,此openid用于微信内网页支付模式下单接口使用。在开发模式中获取AppSecret(成为开发者且帐号没有异常状态)。”
===> "r: 微信数据格式采用xml,字符编码统一为utf-8,签名算法目前为MD5,调用申请退款、撤销订单接口需要商户证书。顺便回顾下支付宝,支付宝数据格式可用xml/json,字符编码可为GBK,GBK2312,UTF-8,签名算法为RSA或者MD5。"
“access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。”
判断逻辑 先判断协议字段返回,再判断业务返回,最后判断交易状态
在普通的网络环境下,HTTP请求存在DNS劫持、运营商插入广告、数据被窃取,正常数据被修改等安全风险。商户回调接口使用HTTPS协议可以保证数据传输的安全性。所以微信支付建议商户提供给微信支付的各种回调采用HTTPS协议。
接下来进入正题:
微信支付签名
1. 四种支付模式
2. API规则
a. 签名算法-- 拼接待签名字符串:
1) 按参数名ASCII码从小到大排序,URL键值对格式拼接。sign参数不参与签名 => stringA
2) 拼接key => stringSignTemp
3) 进行MD5运算,再将字符转为大写