读iOS微信支付文档
1.支付申请流程
1.1 创建APP
前往开放平台注册成为微信开放平台开发者,完成微信认证和创建APP并通过审核
1.2 申请微信支付商户号
提交资料申请微信支付,待资料审核通过后,前往商户平台完成账户验证
1.3 在线签署协议
在线完成协议签署,即开启资金结算功能,启动设计和开发
2.支付账户
APPID:是微信开放平台APP唯一的标识,用于标识该应用。
微信支付商户号:商户申请微信支付后,由微信支付分配的商户收款账号
API密钥:交易过程生成签名的密钥,仅保留在商户系统和微信支付后台,不会在网络中传播。
Appsecret:APPID对应的接口密码,用于获取接口调用凭证access_token时使用。
3.接口规则
3.1 协议规则
传输方式:为保证交易安全性,采取HTTPS协议
提交方式:POST
数据格式:XML
字符编码:UTF-8
签名算法:MD5,后续会兼容SHA1、SHA256、HMAC等。
签名要求:请求和接收数据均需要校验签名
证书要求:调用申请退款,撤销订单接口需要商户证书
判断逻辑:先判断协议字段返回,再判断业务返回,最后判断交易状态
3.2 参数规定
body字段
交易金额
交易类型
货币类型
时间
时间戳
商户订单号
银行类型
3.3 签名算法
3.3.1 签名生成的通用步骤
3.3.1.1
将所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA。
◆ 参数名ASCII码从小到大排序(字典序);
◆ 如果参数的值为空不参与签名;
◆ 参数名区分大小写;
◆ 验证调用返回或微信主动通知签名时,传送的sign参数不参与签名,将生成的签名与该sign值作校验。
◆ 微信接口可能增加字段,验证签名时必须支持增加的扩展字段
3.3.1.2
在stringA最后拼接上key得到stringSignTemp字符串,并对stringSignTemp进行MD5运算,再将得到的字符串所有字符转换为大写,得到sign值signValue。
3.3.2 生成随机数算法
微信支付API接口协议中包含字段nonce_str,主要保证签名不可预测。我们推荐生成随机数算法如下:调用随机数函数生成,将得到的值转换为字符串。
3.3.3 商户证书
3.3.4 商户回调API安全
在普通的网络环境下,HTTP请求存在DNS劫持、运营商插入广告、数据被窃取,正常数据被修改等安全风险。商户回调接口使用HTTPS协议可以保证数据传输的安全性。所以微信支付建议商户提供给微信支付的各种回调采用HTTPS协议
4 业务流程
商户系统和微信支付系统主要交互说明:
步骤1:用户在商户APP中选择商品,提交订单,选择微信支付。
步骤2:商户后台收到用户支付单,调用微信支付统一下单接口。
步骤3:统一下单接口返回正常的prepay_id,再按签名规范重新生成签名后,将数据传输给APP。参与签名的字段名为appid,partnerid,prepayid,noncestr,timestamp,package。注意:package的值格式为Sign=WXPay
步骤4:商户APP调起微信支付。
步骤5:商户后台接收支付通知。
步骤6:商户后台查询支付结果。