前段时间由于业务需求又开始接触了小程序支付调用代码 原来没有整理,现在又要重新看了 太麻烦。
现在把代码整理出来方便以后直接用。
大概给说下 调用流程吧
首先 小程序 授权 授权成功 开始调用 小程序的登录
//调用登录接口
wx.login({
success:
function (re) {
wx.getUserInfo({
success:
function (res) {
typeof cb ==
"function" && cb(that.globalData.userInfo)
wx.request({
url:
'session_key.php',
method:
'GET',
data: {
"code": re.code, supplier_id: that.globalData.shopId},//这个只需要code就可以
header: {
'Accept':
'application/json'
},
截图看下请求参数
// success: function (ree) {
// wx.request({
// url: 'demo.php',
// method: 'GET',
// data: { "sessionKey": ree.data.session_key, "iv": res.iv, "encryptedData": res.encryptedData, supplier_id: that.globalData.shopId },
// header: {
// 'Accept': 'application/json'
// },
请求 参数 截图
supplier_id 是自己加的不需要!!
})
}
})
}
})
后端代码 session_key.php
echo file_get_contents("https://api.weixin.qq.com/sns/jscode2session?appid=".$appid."&secret=".$appsecret."&js_code=".$code."&grant_type=authorization_code");
这个其实就是为了返回这个值 给小程序
小程序接到这个值 然后发起 demo.php 请求 具体看上面代码
demo.php 代码
<?php define('IN_ECS', true); define('IN_CTRL', true); include_once "wxBizDataCrypt.php"; $appid = $res['appid']; /* //调用登录接口 wx.login({ success: function (rres) { wx.getUserInfo({ success: function (res) { //that.globalData.userInfo = res.userInfo that.globalData.userInfo = res.encryptedData+'wangt'+res.iv+'code'+rres.code; //that.globalData.userInfo = res.code //console.log(res.userInfo) typeof cb == "function" && cb(that.globalData.userInfo) } }) } }) */ // $iv : res.iv //js_code : rres.code //$encryptedData : res.encryptedData // https://api.weixin.qq.com/sns/jscode2session?appid=wx397f8d585bdb2557&secret=78e40f84f7392ee199e3adaa6ea72d0a&js_code=021VFFTF0wdcIh2JwUTF0ULGTF0VFFTj&grant_type=authorization_code //返回值为 $sessionKey // $sessionKey = 'P0jnPQP7B2lvWFx7lne8zQ=='; $sessionKey = $_REQUEST['sessionKey']; $encryptedData =$_REQUEST['encryptedData']; // $encryptedData="kkXRS3sZdoIlEAmC29484HLXmW1b7RfUAJMsG3uOFelvRQy+i2N4NzqYR+VtJpy4AzQgEYwmueYfOQkj6Gh52mhpkSPn0eBM6Jky9WCazmrW9kaKmv2BkwDHFyJ5DYSg6bWVBeJrY7ddiihrbEDxR/aMvB2o6ZspzQ/7dcc1Ufwwyj6PM/L2l34mviJ/R/vtclxaOdbojiwx8ujVJh1Pk7QGgZSL0m6+h+em1Is999EHPiOjM6oqCLWz8qxe080U0wFlUwxwdSn3apopyWwt7ZI9EdHLGRSfl/zWG/JEyhYcJXcml3xYdL3wpfc3qdjgofhXv7+yp/hkN5HRzlV6fkIk66JL14jmzaN3kJhktQ0d+Y3SFGUsh5FpBJ6CPvXwZQ21mh30Oi6LYkhmRCVWfF7j1RUngEs8+bZml672OqVhnFMwihW/kiNLbFVb+fHkK2QN8rYhOKbjSaSYVr3QwF26Mb3oK/qoy41iU/uiPQvjn7mikHP0si2a8TbFRRzy5i/EkoltKHtONcOum8kMVQ=="; //$iv = 'r7BXXKkLb8qrSNn05n0qiA=='; // $iv = '+TYATEUZvFiBxLZmSUFyJw=='; $iv = $_REQUEST['iv']; $pc = new WXBizDataCrypt($appid, $sessionKey); $errCode = $pc->decryptData($encryptedData, $iv, $data ); function object2array(&$object) { $object = json_decode($object,true); return $object; } if ($errCode == 0) { // print_r($data); $data = object2array(&$data); unset($data['watermark']); die(json_encode($data)); // var_dump($data['unionId']); } else { print($errCode . "\n"); }
输出用户的信息 以及 openid
注意 要是 关联 了公众平台 还会 多返回一个参数 unid
前面调用 用户信息大概就是这个样子
下面就是支付的 调用
PaypayOrder:
function(){
// xcx_suppliers / zhu_life_wxpay
/**处理支付 */
var total_fee=wx.getStorageSync(
'order_amount')
var order_sn = wx.getStorageSync(
'order_sn')
var order_id = wx.getStorageSync(
'order_id')
var userInfo = app.globalData.userInfo;
wx.request({
url: URL +
'/example/jsapi.php',
method:
'GET',
// data: { "openId": app.globalData.userInfo.openId, "body": "商品结算", "total_fee": total_fee*100, "out_trade_no": order_sn },
data: {
"openId": app.globalData.userInfo.openId,
"body":
"商品结算",
"total_fee": total_fee *
100,
"out_trade_no": order_sn,
"supplier_id": app.globalData.shopId },
header: {
'Accept':
'application/json'
},
success:
function (res) {
var pay_arg = res.data;
wx.requestPayment({
"timeStamp": pay_arg.timeStamp,
"nonceStr": pay_arg.nonceStr,
"package": pay_arg.package,
"signType": pay_arg.signType,
"paySign": pay_arg.paySign,
"success":
function (res) {
},
"fail":
function (res) {
},
"complete":
function (res) {
if (res.errMsg ==
'requestPayment:ok') {
wx.request({
url: URL+
'flow.php',
method:
'GET',
data: {
"act":
"change_order_status", order_id: order_id },
header: {
'Accept':
'application/json'
},
success:
function (res) {
wx.showToast({
title:
'支付成功',
})
setTimeout(
function(){
wx.switchTab({
url:
'../my/my'
})
},
2000)
}
})
}
}
})
}
})
},
请求的 参数
2. 微信SDK 下载链接:https://pay.weixin.qq.com/wiki/doc/api/download/WxpayAPI_php_v3.zip
解压在lib文件夹下可以看到: