小程序支付流程
1、小程序调用wx.login() 获取 临时登录凭证code(用户登录凭证(有效期五分钟)) ,并回传到开发者服务器。
2、开发者需要在开发者服务器后台调用 api,以code换取 用户唯一标识openid 和 会话密钥session_key。之后开发者服务器可以根据用户标识来生成自定义登录态,用于后续业务逻辑中前后端交互时识别用户身份。
$get_token_url = 'https://api.weixin.qq.com/sns/jscode2session?appid='.$appid.'&secret='.$secret.'&js_code='.$code.'&grant_type=authorization_code';
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$get_token_url);
//curl_setopt($ch,CURLOPT_HEADER,0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
$res = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch); //返回openid和session_key
echo $res;
然后用户在小程序端,发起下单操作,由开发者服务器生成订单相关信息,调用统一下单接口
https://api.mch.weixin.qq.com/pay/unifiedorder 先调用该接口在微信支付服务后台生成预支付交易单,返回正确的预支付交易后调起支付
$input = new \WxPayUnifiedOrder();
$input->SetBody("点餐小小".trim($order_info['order_sn']));
$input->SetAttach("点餐小小".trim($order_info['order_sn']));
$input->SetOut_trade_no($pay_sn);
$input->SetTotal_fee(floatval($order_info['amount'])*100);
$input->SetTime_start(date("YmdHis"));
$input->SetTime_expire(date("YmdHis", time() + 3600));
$input->SetGoods_tag("点餐小小".trim($order_info['order_sn']));
$input->SetNotify_url('http://127.0.0.1/wechat_shop-master/Api/Wxpay/notify');
$input->SetTrade_type("JSAPI");
$input->SetOpenid($openId);
$order = \WxPayApi::unifiedOrder($input);
该接口返回预支付订单信息:在return_code 和result_code都为SUCCESS的时候有返回trade_type(类型,取值为:JSAPI,NATIVE,APP等)、prepay_id(微信生成的预支付会话标识,用于后续接口调用中使用,该值有效期为2小时)
获取到prepay_id 后 小程序调用wx.requestPayment(OBJECT)发起微信支付 。package (统一下单接口返回的 prepay_id 参数值,提交格式如:prepay_id=* )paySign 签名 返回success调用成功
success |
requestPayment:ok |
调用支付成功 |
fail |
requestPayment:fail cancel |
用户取消支付 |
Paysign:appId、timeStamp、nonceStr、package、signType 五个参数同过md5实现加密
遇到问题:APPID_MCHID_NOT_MATCH appid和mch_id不匹配 原因是前后使用了不同的APPID
其中,一开始对jsapi 和APP 和native 不知道什么意思特意查了下:名词解释
JSAPI网页支付
JSAPI网页支付即前文说的公众号支付,可在微信公众号、朋友圈、聊天会话中点击页面链接,或者用微信“扫一扫”扫描页面地址二维码在微信中打开商户HTML5页面,在页面内下单完成支付。
Native原生支付
Native原生支付即前文说的扫码支付,商户根据微信支付协议格式生成的二维码,用户通过微信“扫一扫”扫描二维码后即进入付款确认界面,输入密码即完成支付。
app支付:
微信开放平台是商户APP接入微信支付开放接口的申请入口,通过此平台可申请微信APP支付。
平台入口:http://open.weixin.qq.com。