TP5+小程序微信支付

1.获取openid
由于小程序只能授权一个域名,所以获取openid接口写在后端
服务器端:
-
$url="https://api.weixin.qq.com/sns/jscode2session?appid=".$_GET['appid']."&secret=".$_GET['secret']."&js_code=".$_GET['code']."&grant_type=authorization_code";
-
$html = file_get_contents($url);
-
echo $html;//将获取到的数据传给小程序
小程序端:
-
//调用登录接口
-
wx.login({
-
success: function (res) {
-
//该方法获取到code
-
//将code及小程序appId、secret发送给服后端
-
wx.request({
-
url: 'URL?appid=' + appId + "&secret=" + secret + "&code=" + res.code,
-
success: function (r) {
-
//r.data取到openid
-
//openid获取到了存储起来
-
}
-
})
-
}
-
})
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=$_GET['money']*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");
-
$input->SetTrade_type("JSAPI");
-
// 由小程序端传给服务端
-
$input->SetOpenid(input('openid'));
-
// 向微信统一下单,并返回order,它是一个array数组
-
$order = \WxPayApi::unifiedOrder($input);
-
// json化返回给小程序端
-
header("Content-Type: application/json");
-
echo json_encode($order);
-
}
小程序端
-
wx.request({
-
-
url: app.config.url + "wxpay?openid=" + this.data.openid + "&bus=" + app.config.bus + "&user=" + this.data.user +"&money="+this.data.money,
-
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) {
-
//支付成功之后的操作
-
-
}
-
});
-
-
}
-
})
-
相关新闻

2019.10.15
1972
图形是产品设计中被讨论的最多的元素之一。视觉设计师使用不同形状的图形来表达事物的多样性;交互设计师选择不同形状的图形解决用户在某场景下的诉求问题。

2020.09.09
1462
go中时间可分为时间点(Time)与时间段(Duration),时间的操作应用主要在于time 包的使用。

2018.09.28
2823
在产品设计工作中,竞品分析做为重要环节,从前仅以设计师角度来看竞品分析,但经历从设计到产品的职业转换后,我终于学会了与竞品做朋友,以谈恋爱的方式去发掘它独有的魅力和潜能,以及去深入了解他,挖掘它能给我带来的好运。