您所在的位置:首页 / 知识分享

TP5+小程序微信支付

2018.12.19

2051

小平

1.获取openid
由于小程序只能授权一个域名,所以获取openid接口写在后端
服务器端

  1.         $url="https://api.weixin.qq.com/sns/jscode2session?appid=".$_GET['appid']."&secret=".$_GET['secret']."&js_code=".$_GET['code']."&grant_type=authorization_code";
  2.         $html = file_get_contents($url);
  3.         echo $html;//将获取到的数据传给小程序
小程序端
  1.   //调用登录接口
  2.     wx.login({
  3.       success: function (res) {
  4.         //该方法获取到code
  5.         //将code及小程序appId、secret发送给服后端
  6.         wx.request({
  7.           url: 'URL?appid=' + appId + "&secret=" + secret + "&code=" + res.code,
  8.           success: function (r) {
  9.             //r.data取到openid
  10.             //openid获取到了存储起来
  11.           }
  12.         })
  13.       }
  14.     })
2.发起支付
服务器端:
  1. <?php 
  2. namespace app\api\controller;
  3. use think\Controller;
  4. use think\Loader;
  5. Loader::import('WxPay.WxPay', EXTEND_PATH, '.Api.php');//将附件放入根目录下的/extend
  6. class Wxpay extends Controller
  7. {
  8.         function index() {
  9.             //订单号
  10.              $order=订单号;
  11.              $money=$_GET['money']*100;
  12.             //     初始化值对象
  13.             $input = new \WxPayUnifiedOrder();
  14.             //     文档提及的参数规范:商家名称-销售商品类目
  15.             $input->SetBody("点餐");
  16.             //     订单号应该是由小程序端传给服务端的,在用户下单时即生成,demo中取值是一个生成的时间戳
  17.             $input->SetOut_trade_no("$order");
  18.             //     费用应该是由小程序端传给服务端的,在用户下单时告知服务端应付金额,demo中取值是1,即1分钱
  19.             $input->SetTotal_fee("$money");
  20.             $input->SetNotify_url("http://paysdk.weixin.qq.com/example/notify.php");
  21.             $input->SetTrade_type("JSAPI");
  22.             //     由小程序端传给服务端
  23.             $input->SetOpenid(input('openid'));
  24.             //     向微信统一下单,并返回order,它是一个array数组
  25.             $order = \WxPayApi::unifiedOrder($input);
  26.             //     json化返回给小程序端
  27.             header("Content-Type: application/json");
  28.             echo json_encode($order);
  29.         }
小程序端
  1.  wx.request({
  2.       
  3.         url: app.config.url + "wxpay?openid=" + this.data.openid + "&bus=" + app.config.bus + "&user=" + this.data.user +"&money="+this.data.money,
  4.         success: function (response){
  5.             var timeStamp = (Date.parse(new Date()) / 1000).toString();
  6.             var pkg = 'prepay_id=' + response.data.prepay_id;
  7.             var nonceStr = response.data.nonce_str;
  8.             var paySign = md5.hexMD5('appId=' + 小程序appId + '&nonceStr=' + nonceStr + '&package=' + pkg + '&signType=MD5&timeStamp=' + timeStamp + "&key=微信支付key").toUpperCase();//此处用到hexMD5插件
  9.             //发起支付
  10. wx.requestPayment({
  11.               'timeStamp': timeStamp,
  12.               'nonceStr': nonceStr,
  13.               'package': pkg,
  14.               'signType': 'MD5',
  15.               'paySign': paySign,
  16.               'success': function (res) {
  17.                //支付成功之后的操作
  18.            
  19.               }
  20.             });
  21.          }
  22. })

相关新闻

让人头疼的python 编码问题!!!

2018.10.29

0

中文编码问题是用中文的程序员经常头大的问题,在python下也是如此,那么应该怎么理解和解决python的编码问题呢?

圆角矩形背后的含义|深度解析

2019.10.15

1561

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

关于Go channel 简单说明

2021.01.05

1019

这段代码为出现 deadlock错误, 因为我们使用ch := make(chan int)创建的是无缓冲的通道, 无缓冲的通道只有在有人接收值的时候才能发送值。