ThinkPHP5.0整合微信掃碼支付(PC端)
阿新 • • 發佈:2018-12-05
前兩天發現微信官方測試掃碼支付的連結崩了,公益404了,http://paysdk.weixin.qq.com,微信也不說一聲,這讓使用這個連結生成二維碼的使用者情何以堪......只好下載官方的demo放到自己網站上生成二維碼了。
趁熱打鐵,把微信支付demo整合到tp5裡面,實現微信掃碼支付~~~
下載demo,目錄結構如下:
把 lib 資料夾拿出來,放到tp5根目錄 vendor 資料夾下,重新命名為wxpay:
把 example 資料夾下的 WxPay.Config.php 拿出來,放到wxpay目錄下,修改require_once,並配置支付引數:
<?php require_once "WxPay.Config.Interface.php"; class WxPayConfig extends WxPayConfigInterface { //APPID public function GetAppId() { return 'xxx'; } //商戶號 public function GetMerchantId() { return 'xxx'; } //支付回撥url public function GetNotifyUrl() { return "xxx"; } //簽名和驗證簽名方式, 支援md5和sha256方式 public function GetSignType() { return "HMAC-SHA256"; } //curl代理 public function GetProxy(&$proxyHost, &$proxyPort) { $proxyHost = "0.0.0.0"; $proxyPort = 0; } //上報錯誤等級 public function GetReportLevenl() { return 1; } //KEY:商戶支付金鑰 public function GetKey() { return 'xxx'; } //APPSECRET:公眾帳號secert public function GetAppSecret() { return 'xxx'; } //證書路徑 public function GetSSLCertPath(&$sslCertPath, &$sslKeyPath) { $sslCertPath = 'http://www.xxx.com/cert/apiclient_cert.pem'; $sslKeyPath = 'http://www.xxx.com/cert/apiclient_key.pem'; } }
關於證書存放位置:
修改 WxPay.Api.php 第二個require_once:
require_once "WxPay.Config.php";
Wxpay.php控制器:
<?php namespace app\index\controller; use think\Controller; class Wxpay extends Controller { public function index(){ header("Content-type:text/html;charset=utf-8"); require VENDOR_PATH.'/wxpay/WxPay.Api.php'; //引入微信支付 $input = new \WxPayUnifiedOrder();//統一下單 $config = new \WxPayConfig();//配置引數 //$paymoney = input('post.paymoney'); //支付金額 $paymoney = 1; //測試寫死 $out_trade_no = 'WXPAY'.date("YmdHis"); //商戶訂單號(自定義) $goods_name = '掃碼支付'.$paymoney.'元'; //商品名稱(自定義) $input->SetBody($goods_name); $input->SetAttach($goods_name); $input->SetOut_trade_no($out_trade_no); $input->SetTotal_fee($paymoney*100);//金額乘以100 $input->SetTime_start(date("YmdHis")); $input->SetTime_expire(date("YmdHis", time() + 600)); $input->SetGoods_tag("test"); $input->SetNotify_url("http://www.xxx.com/wxpaynotifyurl"); //回撥地址 $input->SetTrade_type("NATIVE"); $input->SetProduct_id("123456789");//商品id $result = \WxPayApi::unifiedOrder($config, $input); if($result['result_code']=='SUCCESS' && $result['return_code']=='SUCCESS') { $url = $result["code_url"]; $this->assign('url',$url); }else{ $this->error('引數錯誤'); } return view(); } }
前臺要生成掃碼支付的二維碼。把demo中 example 資料夾下的 phpqrcode資料夾 和 qrcode.php 拿出來,我放到了專案根目錄/public下面:
然後頁面中使用img標籤載入二維碼即可:
<img class="wxpay_img" src="/qrcode.php?data={$url}" alt="掃碼支付">
測試生成了一個二維碼(這裡做了馬賽克處理):
掃碼支付測試: