thinkphp5.0 微信掃碼支付模式二

僅供我的參考,方便你們。javascript

 

1、1)https://pay.weixin.qq.com/index.php/core/home/login  複製此地址 打開微信商戶平臺。php

       2)下載安全操做證書(最好在IE下載);css

   

  3)安裝後的界面html

 

4)下載證書  (必定要用主帳號登陸,纔會顯示下載證書)前端

 

此圖片摘自網絡,若有侵權請聯繫刪除。java

5)設置32位祕鑰(百度祕鑰生成可在線生成);jquery

2、1)https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=11_1  打開此連接下載SDK。thinkphp

  

2) 下載後的目錄結構json

3)在thinkphp5 中把SDK放到extend 目錄下 建立的wxpay文件下。api

wxpay 文件

 

 3、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 * 一、調用統一下單,取得code_url,生成二維碼 46 * 二、用戶掃描二維碼,進行支付 47 * 三、支付完成以後,微信服務器會通知支付成功 48 * 四、在支付成功通知中須要查單確認是否真正支付成功(見: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>
相關文章
相關標籤/搜索