小程序+5.0.X微信支付
1.获取openid
由于小程序只能授权一个域名,所以获取openid接口写在后端
服务器端:
$url="https://api.weixin.qq.com/sns/jscode2session?appid=".你的appid."&secret=".你的公众号密钥."&js_code=".调登陆接口返回的code."&grant_type=authorization_code";
$html = file_get_contents($url);//或者curl
echo $html;//将获取到的数据传给小程序
2.发起支付
服务器端:
此代码参考慕课网七月讲师的代码
<?php
namespace app\api\controller;
use think\Controller;
use think\Loader;
Loader::import('WxPay.WxPay', EXTEND_PATH, '.Api.php');//将附件放入根目录下的/extend
class Wxpay extends Controller
{
function index() {
//订单号
$order=订单号;
$money=1*100;//价格
// 初始化值对象
$input = new \WxPayUnifiedOrder();
// 文档提及的参数规范:商家名称-销售商品类目
$input->SetBody("点餐");
// 订单号应该是由小程序端传给服务端的,在用户下单时即生成,demo中取值是一个生成的时间戳
$input->SetOut_trade_no("$order");
// 费用应该是由小程序端传给服务端的,在用户下单时告知服务端应付金额,demo中取值是1,即1分钱
$input->SetTotal_fee("$money");
$input->SetNotify_url("http://paysdk.weixin.qq.com/example/notify.php");//url回调地址
$input->SetTrade_type("JSAPI");
// 由小程序端传给服务端
$input->SetOpenid(openid);//openid
// 向微信统一下单,并返回order,它是一个array数组
$order = \WxPayApi::unifiedOrder($input);
// json化返回给小程序端
header("Content-Type: application/json");
echo json_encode($order);
}
}
小程序端
wx.request({
url:后台地址 ,
success: function (response){
var timeStamp = (Date.parse(new Date()) / 1000).toString();
var pkg = 'prepay_id=' + response.data.prepay_id;
var nonceStr = response.data.nonce_str;
var paySign = md5.hexMD5('appId=' + '小程序appId' + '&nonceStr=' + nonceStr + '&package=' + pkg + '&signType=MD5&timeStamp=' + timeStamp + "&key=微信支付key").toUpperCase();//此处用到hexMD5插件
//发起支付
wx.requestPayment({
'timeStamp': timeStamp,
'nonceStr': nonceStr,
'package': pkg,
'signType': 'MD5',
'paySign': paySign,
'success': function (res) {
//支付成功之后的操作
}
});
}
})
附件地址:https://download.csdn.net/download/php12345679/10328991
将5个.php文件放入extend文件 把WxPay.Config.php里的配置信息改成自己的
把md5.js放到小程序utils文件夹下 并在调用支付的js文件开头用如下方式引入
var md5 = require('../../utils/md5.js')