支付商品分为好几类:
1. 会员充值: member
2. 试卷: paper
3. 叶子节点,一键组卷: leaf
4. 整棵树,一键下载: tree
所以要设计一个支付类型
订单半个小时内有效, 过期作废
redis的key如何构成:
手机号+类型+产品id
手机号11位
类型2位
产品id分为好几种:
tag
bbs讨论了下,多数人觉得每个prepay_id都必须入库
pay.开头的weixin网站, 进去, 点击商户平台, 产品中心, 可以看到已经开通的所有支付方式, 真操蛋。
微信开放平台,app接入微信支付开放接口的申请入口,open.weixin.qq.com
商户证书,我们后台服务器和微信服务器通过新的凭据
trade_type:
JSAPI,NATIVE,APP
货币类型:CNY
交易金额:接口中参数支付金额单位为分,对账单中交易金额单位为元
body字段格式:
使用场景 支付模式 商品字段规则 样例
第三方APP | APP支付 | 应用市场上的APP名字-商品概述 | 天天爱消除-游戏充值 |
银行类型:
字符型银行编码 银行名称
CMB_DEBIT | 招商银行(借记卡) |
CMB_CREDIT | 招商银行(信用卡) |
签名类型: MD5
校验方式:XML
搭建HTTPS,参考:
https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=10_4
后台需要提供给app的接口:
1. 请求生产支付订单
需要知道:
a. 支付类型,是微信还是支付宝
b. 产品编码,是包月,包季,还是包年
2. 支付完成后,后台查询实际支付结果
后台需要调用微信支付的api:
1. 统一下单API:/pay/unifiedorder
2. 调用微信查询API查询支付结果:/pay/orderquery
3. 调用关单接口:/pay/closeorder
后台需要提供给微信的接口:
1. 接受微信的通知,此通知包含支付结果
后台自己需要具备的功能:
1. 生成带签名的客户端支付信息
2. 接收和保存支付通知
在正式上线微信支付前还需要做接入验收
APPID
商户号:
Http响应协议包含status code, header, body
PC网站支付:
单位分,对账单单位元,参数值不能带小数
trade_type: NATIVE
CNY
时间为标准北京时间
时间戳:自1970年1月1日0点0分0秒以来的秒数, 10位数字
商户订单号:
支持字母,数字,中划线,下划线, 竖线,星号, 半角字符, 根据当前系统时间加随机序列生成订单号
body字段:
xx教育-会员充值
8. 银行类型:
CMB_DEBIT 借记卡
CMB_CREDIT 信用卡
协议规则, 采用HTTPS
POST方法提交
UTF-8
MD5/HMAC-SHA256
请求和接收数据均需要校验签名
先判断协议字段, 再业务, 再判断交易状态
签名算法
1. 字母顺序排序, key1=value1&key2=value2...======> stringA
2. 从微信返回的对象, 微信方传送的sign参数不参与签名, 将我们自己平台计算的签名和微信的签名作教研
3. 在2得到的stringA拼接上key得到stringSignTemp
4. 对stringSignTemp做MD5
5. 将4得到的串所有字符转化为大写
6. key可以看代码Global
涉及到的文件:app\web\rest\util\HDUtility
app\settings\Global
LearnOrderResource
展示二维码开始, 每隔2秒钟查询一下后台服务器, 知道60秒结束
涉及多线程问题,一边是微信什么时候调用回调函数, 一边是我们的前端不停的轮询。