thinkphp5.0 微信扫码支付模式二

仅供个人参考,方便大家。

一、1)https://pay.weixin.qq.com/index.php/core/home/login  复制此地址 打开微信商户平台。

2)下载安全操作证书(最好在IE下载);

3)安装后的界面

4)下载证书

5)设置32位秘钥(百度秘钥生成可在线生成);

二、1)https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=11_1  打开此链接下载SDK。

2) 下载后的目录结构

3)在thinkphp5 中把SDK放到extend 目录下 创建的wxpay文件下。

wxpay 文件

三、1)引入SDK下的类(注意一定要改SDK下lib文件下的类名,把点去掉)

原来是有点 例如:WxPay.Api.php

extend 目录下wxpay文件下。。。去掉点后把相关的类中引到的也去掉。

2)打开WxPayConfig.php 配置好相关设置

3)后台 控制器 代码

  1 <?php
  2 namespace app\home\controller;
  3 use think\Loader;
  4 use think\Db;
  5 use think\Log;
  6 /**
  7  * 微信支付控制器
  8  */
  9
 10 class Weixinpays extends Base{
 11
 12     /**
 13      * 初始化
 14      */
 15     private $wxpayConfig;
 16     private $wxpay;
 17     public function _initialize() {
 18          Loader::import(‘wxpay.lib.WxPayConfig‘);
 19         Loader::import(‘wxpay.lib.WxPayData‘,EXTEND_PATH);
 20         Loader::import(‘wxpay.lib.WxPayApi‘,EXTEND_PATH);
 21         Loader::import(‘wxpay.lib.WxPayNotify‘,EXTEND_PATH);
 22         Loader::import( ‘wxpay.lib.WxPayNativePay‘,EXTEND_PATH);
 23         Loader::import( ‘wxpay.example.log‘,EXTEND_PATH);
 24         error_reporting(E_ERROR);
 25         Loader::import(‘wxpay.example.phpqrcode.phpqrcode‘);
 26         Loader::import(‘wxpay.example.notify‘);
 27     }
 28
 29     /**
 30      * 获取微信URL
 31      */
 32     public function getWeixinPaysURL(){
 33         $m = new M();
 34         $userId = (int)session(‘WST_USER.userId‘);
 35         $obj = array();
 36         $obj["userId"] = $userId;
 37         $obj["orderNo"] =$out_trade_no= input(‘orderNo‘);
 38         $obj["isBatch"] = 1;
 39         $data = model(‘Orders‘)->checkOrderPay($obj,3);
 40         if($data["status"]==1){
 41             $needPay = $m->getPayOrders($obj,3);
 42             //模式二
 43             /**
 44              * 流程:
 45              * 1、调用统一下单,取得code_url,生成二维码
 46              * 2、用户扫描二维码,进行支付
 47              * 3、支付完成之后,微信服务器会通知支付成功
 48              * 4、在支付成功通知中需要查单确认是否真正支付成功(见:notify.php)
 49              */
 50             import(‘wxpay.lib.WxPayData‘,EXTEND_PATH);
 51
 52             $input = new \WxPayUnifiedOrder();
 53             $input->SetBody("购物");
 54             $input->SetAttach("test1");
 55             $input->SetOut_trade_no($out_trade_no);
 56             $input->SetTotal_fee($needPay * 100);//以分为单位
 57             $input->SetTime_start(date("YmdHis"));
 58             $input->SetTime_expire(date("YmdHis", time() + 600));
 59             $input->SetGoods_tag("test");
 60             $input->SetNotify_url("http://www.shopdemo.com/home/weixinpays/notify");
 61             $input->SetTrade_type("NATIVE");
 62             $input->SetProduct_id("123456789");
 63             $notify = new \NativePay();
 64             $result = $notify->GetPayUrl($input);
 66             $url2 = $result["code_url"]; 70             $this->assign(‘url‘,$url2);
 71             $this->assign(‘out_trade_no‘,$out_trade_no);
 72             return $this->fetch(‘testpay‘);
 73         }
 74         return "失效";
 75         $this->fetch(‘testpay‘);
 76     }
 77     /*生成微信支付二维码二*/
 78     public function Qrcode(){
 79         $URl1=input("data");
 80         $url = base64_decode($URl1);
 81         $QRcode = new \QRcode();
 82         ob_end_clean();
 83         $QRcode->png($url);
 84
 85     }
 86     //订单查询结果
 87     public function orderstate()
 88     {
 89         error_reporting(E_ERROR);
 90      if(isset($_REQUEST["out_trade_no"]) && $_REQUEST["out_trade_no"] != ""){
 91             $out_trade_no = $_REQUEST["out_trade_no"];
 92             $input = new \WxPayOrderQuery();
 93             $input->SetOut_trade_no($out_trade_no);
 94             echo json_encode(\WxPayApi::orderQuery($input));
 95             exit();
 96         }
 97     }
 98     // 回调页面
 99     public function notify()
100     {
101         $xml = file_get_contents(‘php://input‘);
102         $notify = new \PayNotifyCallBack();
103         $notify->Handle(false);
104         $result = $notify->GetValues();    //数组
105         $WxPayResults = new \WxPayResults();
106         $dataTarr = $WxPayResults::Init($xml);//返回数据转换为数组
107         //打印日志
108         Log::write(‘-------微信支付------‘, ‘notice‘);
109         Log::write($dataTarr, ‘notice‘);
110         if ($result[‘return_code‘] == ‘SUCCESS‘) {
111             // 订单支付完成,修改订单状态,发货。
112             $data = array();
113             $data["needPay"] = 0;
114             $data["isPay"] = 1;
115             $data["orderStatus"] = 0;
116             $data["payFrom"] = 2;
117             $out_trade_no = $dataTarr[‘out_trade_no‘];
118             $res = Db::name(‘orders‘)->where([‘orderunique‘ => "$out_trade_no"])->update($data);
119             if ($res) {
120                 echo "SUCCESS";
121             } else {
122                 echo "FAIL";
123             }
124         } else {
125             echo "FAIL";
126         }
127     }

4)前端代码

 1 <html>
 2 <head>
 3     <meta http-equiv="content-type" content="text/html;charset=utf-8"/>
 4     <meta name="viewport" content="width=device-width, initial-scale=1" />
 5     <title>微信支付样例-退款</title>
 6 </head>
 7 <body>
 8 <div style="margin-left: 10px;color:#556B2F;font-size:30px;font-weight: bolder;">扫描支付模式二</div><br/>
 9 <input type="hidden" id="out_trade_no" value="{$out_trade_no}" >
10 <img id=‘img‘ alt="模式二扫码支付" src="{:url(‘Weixinpays/Qrcode‘,‘data=‘.base64_encode($url))}" style="width:150px;height:150px;"/>
11 </body>
12 <script src="__STYLE__/js/jquery-3.2.1.min.js?v={$v}"></script>
13 <script type="text/javascript" src="__STATIC__/plugins/layer/layer.js?v={$v}"></script>
14 <script type="text/javascript" src="__STATIC__/plugins/layer/skin/layer.css?v={$v}"></script>
15 <script type="text/javascript">
16     // 检测是否支付成功
17     $(document).ready(function () {
18         check();
19       //每三秒请求一次
20         setInterval("check()", 3000);
21     });
22     function check() {
23         var url = "{:url(‘/home/Weixinpays/orderstate‘)}";
24         var out_trade_no = $("#out_trade_no").val();
25         var param = {‘out_trade_no‘:out_trade_no};
26         $.post(url,param,function(data){
27             data=data.split("</xml>");
28             console.log(data[1]);
29           var  arr = JSON.parse(data[1]);
30             console.log(arr[‘trade_state‘]);
31             if (arr[‘trade_state‘] == ‘SUCCESS‘) {
32                 // 支付成功把二维码替换成支付成功图标
33                 $("#img").attr(‘src‘,‘/upload/goods/2018-06/5b1746d12bdca_thumb.jpg‘);
34                 //页面跳转 到成功页面
35                 layer.msg(‘支付成功!‘,{icon:6,skin:‘#f0f0f0‘,shade:0.2});
36                 window.setTimeout("window.location="+"‘{:url(‘home/users/mallorders‘)}‘",1000);
37             }else{
38
39             }
40         });
41     }
42 </script>
43 </html>

原文地址:https://www.cnblogs.com/zgbcode/p/9179266.html

时间: 2024-10-09 09:49:54

thinkphp5.0 微信扫码支付模式二的相关文章

JAVA微信扫码支付模式二功能实现以及回调

一.准备工作 首先吐槽一下微信关于支付这块,本身支持的支付模式就好几种,但是官方文档特别零散,连像样的JAVA相关的demo也没几个.本人之前没有搞过微信支付,一开始真是被它搞晕,折腾两天终于调通了,特此写下来,以享后人吧! 关于准备工作,就"微信扫码支付模式二"官方文档地址在这 https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_1 可以先看看,实际上需要准备的东西有以下几个: 其中APP_ID和APP_SECRET

C# 微信扫码支付API (微信扫码支付模式二)

一.SDK下载地址:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=11_1,下载.NET C#版本: 二.微信相关设置:(微信扫码支付模式二) 1. 公众账号ID,公众账号secert ,地址:https://mp.weixin.qq.com/ 2. 商户号,商户支付密钥KEY,商户平台地址:https://pay.weixin.qq.com/ 5. 部署的服务器终端ip及回调页面 (1)部署的服务器终端ip:即程序部署所在的

微信扫码支付模式二之CodeIgniter集成篇

CI:3.0.5 微信支付API类库来自:https://github.com/zhangv/wechat-pay 请先看一眼官方场景及支付时序图:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_5 官方API列表:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_1 二维码生成类库:phpqrcode 走了几天的弯路,直到遇到Lamtin指点(热心网友)

.NET MVC结构框架下的微信扫码支付模式二 API接口开发测试

直接上干货 ,我们的宗旨就是为人民服务.授人以鱼不如授人以渔.不吹毛求疵.不浮夸.不虚伪.不忽悠.一切都是为了社会共同进步,繁荣昌盛,小程序猿.大程序猿.老程序猿还是嫩程序猿,希望这个社会不要太急功近利 ,希望每个IT行业的BOSS要有良知,程序猿的青春年华都是无私默默奉献,都是拿命拼出来了现在的成就,如果卸磨杀驴,如果逼良为娼,请MM你的良心对得起你爹妈吗,你也有家,你也有小孩,你也有父母的. 在这里致敬程序猿, 致敬我们的攻城狮,致敬我们最可爱的人! 珍惜生命,换种活法也是依然精彩. Vie

微信公众号 扫码支付 模式二 demo

扫码支付 本文附有代码,在下方,如果不熟悉场景的可以看看下面的场景介绍 场景介绍 官网介绍地址:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_1 用户扫描商户展示在各种场景的二维码进行支付. 步骤1:商户根据微信支付的规则,为不同商品生成不同的二维码(如图6.1),展示在各种场景,用于用户扫描购买. 步骤2:用户使用微信"扫一扫"(如图6.2)扫描二维码后,获取商品支付信息,引导用户完成支付(如图6.3). 图6

微信支付Native扫码支付模式二之CodeIgniter集成篇

微信支付API类库来自:https://github.com/zhangv/wechat-pay 请先看一眼官方场景及支付时序图:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_5 官方API列表:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_1 二维码生成类库:phpqrcode 走了几天的弯路,直到遇到Lamtin指点(热心网友),他说你既然是集成

Thinkphp5整合微信扫码支付开发实例

ThinkPHP框架是比较多人用的,曾经做过的一个Thinkphp5整合微信扫码支付开发实例,分享出来大家一起学习 打开首页生成订单,并显示支付二维码 public function index() { $wechat = new Wechat(); $data['order'] = date('Ymd') . substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8); //订单号 $

微信扫码支付(模式一)

项目开源地址:http://git.oschina.net/javen205/weixin_guide 微信扫码支付(模式一)你有测试成功吗?如果你看到了这篇文章,我想你是在测试中遇到问题了.OK 那现在我们来看看微信扫码支付中的坑. 原生支付URL参数错误 回调接口URL有回调,但是接收不到参数 商户后台返回的数据字段结构不合法 获取商户订单信息超时或者商户返回的httpcode非200 官方文档地址:https://pay.weixin.qq.com/wiki/doc/api/native.

php微信支付(仅pc端扫码支付模式二)详细步骤.----仅适合第一次做微信开发的程序员

本人最近做了微信支付开发,是第一次接触.其中走了很多弯路,遇到的问题也很多.为了让和我一样的新人不再遇到类似的问题,我把我的开发步骤和问题写出来,以供参考. 开发时间是2016/8/10,所以微信支付的版本也是对应此时的版本. 一.前期准备: 首先你们公司开通微信支付功能后,会收到一份邮件,里面有账户相关信息,一般有:微信支付商户号,商户平台登录帐号,商户平台登录密码,申请对应的公众号,公众号APPID. 1.下载demo:用上面信息登陆“微信商户平台”,>>>(右上角开发文档)>