微信APP支付服务端php sdk开发教程
最近公司app要接入微信支付,就去研究了下,发现开发文档介绍得太不具体了,踩了很多坑,为了各位看官,避免重复踩坑,决定写下此文。
微信官方就给了2个压缩包,一个是android,一个是ios,
打开发现里面只有java的服务端sdk,只能自己写php的命了。
没有专门针对服务端的文档,就打开安卓的文档看看吧。
接入流程大致如下:
1.获取access_token,这步有点类似开发平台的oauth2认证请求
http 请求方式: GET
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
正确返回值
{“access_token”:”ACCESS_TOKEN”,”expires_in”:7200}
2.生成预支付订单
这步通过第一步得到的ACCESS_TOKEN以及手机端提交的订单信息,请求微信服务端,得到返回参数,二次签名返回给手机。
http 请求方式:POST
https://api.weixin.qq.com/pay/genprepay?access_token=ACCESS_TOKEN
{
“appid”:”wwwwb4f85f3a797777″,
“traceid”:”crestxu”,
“noncestr”:”111112222233333″,
“package”:”bank_type=WX&body=XXX&fee_type=1&input_charset=GBK¬ify_url=http%3a%2 f%2f www.qq.com&out_trade_no=16642817866003386000&partner=1900000109&spbill_create_ip=1 27.0.0.1&total_fee=1&sign=BEEF37AD19575D92E191C1E4B1474CA9″,
“timestamp”:1381405298,
“app_signature”:”53cca9d47b883bd4a5c85a9300df3da0cb48565c”,
“sign_method”:”sha1″
}
正确返回值
{“prepayid”:”PREPAY_ID”,”errcode”:0,”errmsg”:”Success”}
package 生成方法:
A)对所有传入参数按照字段名的 ASCII 码从小到大排序(字典序)后,使用 URL 键值对的格 式(即 key1=value1&key2=value2…)拼接成字符串 string1;
B) 在 string1 最后拼接上 key=partnerKey 得到 stringSignTemp 字符串, 并对 stringSignTemp 进行 md5 运算,再将得到的字符串所有字符转换为大写,得到 sign 值 signValue。
C)对 string1 中的所有键值对中的 value 进行 urlencode 转码,按照 a 步骤重新拼接成字符 串,得到 string2。对于 js 前端程序,一定要使用函数 encodeURIComponent 进行 urlencode 编码(注意!进行 urlencode 时要将空格转化为%20 而不是+)。
D)将 sign=signValue 拼接到 string1 后面得到最终的 package 字符串。
app_signature 生成方法:
A)参与签名的字段包括:appid、appkey、noncestr、package、timestamp 以及 traceid
B)对所有待签名参数按照字段名的 ASCII 码从小到大排序(字典序)后,使用 URL 键值对的 格式(即 key1=value1&key2=value2…)拼接成字符串 string1。 注意:所有参数名均为小写字符
C)对 string1 作签名算法,字段名和字段值都采用原始值,不进行 URL 转义。具体签名算法 为 SHA1
3.手机调起微信支付
得到服务端返回值后,手机直接带这些值唤起微信支付。(PS:手机端不要太轻松)
4.异步通知
支付成功后,微信服务端会通知我们服务端支付成功,需要我们接到通知返回接受成功,手机app才能正常提示成功哦~
我自己写的微信APP支付服务端php sdk
GIT项目 之后更新也在这里https://github.com/fanhefan/wechat_app_pay
下面结合上面内容介绍下sdk
pay.php文件整合了1、2两步,手机app请求这个接口必须传一个充值金额,其他根据自己的业务自己定,返回唤起微信支付的全部参数,手机端只需要接受参数唤起即可。
wechat_notify.php是用来接受异步通知的
最后wechatconfig.php要改成自己的配置信息。
接入愉快~~~