微信公众号支付流程
项目背景:
1、前后端分离,前端是jquery 获取后端接口 (php)
开发流程:
1、配置
进入微信公众平台,申请开通微信支付,不开通就别进行下一步了。开通后,进入左侧的微信支付,点击开发配置,公众号支付授权目录,一般为H5页面的上一级目录。记得写‘/’
2、前端js 使用微信接口获取code
具体接口:https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect (静默授权,用户感知不到)
REDIRECT_URI 为当前页面 这个页面要做打开页面的操作,真正的打开,不是请求参数,不然坑死你没商量。微信服务器会302调回到REDIRECT_URI 传来的页面,后面会附带参数code和state ,成功获取。
3、前端将获取的code发送给后端,getOpenId() 主要实现的功能为通过code换取网页授权access_token 和需要付款时调起很关键的openId
public function getOpenId(){
//$url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code ';
$code = I('param.code');
if(empty($code)){
die;
}
$appId = 'wx1234123412341234';
$secret = '3434212331234123235345';
$s = 'CODE';
$result = file_get_contents('https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$appId.'&secret='.$secret.'&code='.$code.'&grant_type=authorization_code');
后端代替前端获取openId会比较安全,因为涉及到secret,不应该在前端存储。
4.下面开始正式预订单 前端传递参数 后端来处理
前端传递一些必要的订单号,金额等,后端获取 注意大小写,原生php的项目使用官方的demo挺合适的。不然使用一些网上分享的类来做也可以。这一块的文章太多了,只要按照文章来做,一定可以获取到prepay_id 的
if ($wx_result['return_code'] === 'SUCCESS' && $wx_result['return_msg'] === 'OK' && $wx_result['result_code'] === 'SUCCESS' )
都正常那就开始业务逻辑,生成订单等等
5,二次签名
//二次签名
$sign_array = array();
$sign_array['appId'] = $wx_result['appid'];
$sign_array['nonceStr'] = $wx_result['nonce_str'];
$sign_array['package'] = 'prepay_id='.$wx_result['prepay_id'];
$sign_array['signType'] = 'MD5';
$sign_array['timeStamp'] = time();
这块注意下大小写,$wx_result数组是第四步传来的。 挑选有用的来加密,实现调起微信公众号支付。
6、前端获取 返回的json数据,调起
jsApiCall() 括号内一定要加上data!!!!!!!!弄了三天,你懂得。
7、支付成功后,微信会通知服务器,开始后台逻辑xxxx
其实没有那么多的坑,微信的文档仔细看仔细看仔细看
差不多就这样了。