微信支付PHP SDK之微信公衆號支付代碼詳解

微信php支付接口demo下載
https://pay.weixin.qq.com/wik...php

官方文檔參考
https://pay.weixin.qq.com/wik...html

1. 配置公衆號信息
圖片描述
咱們先進行測試,因此先把測試受權目錄和 測試白名單添加上。測試受權目錄是你要發起微信請求的哪一個文件所在的目錄。
例如jsapi 發起請求通常是jsapi.php所在目錄 爲測試目錄,測試白名單即開發人員的微信號。
正式的支付受權目錄不能和測試的同樣不然會報錯。不填寫或者填錯受權目錄以及測試白名單都會報錯。
報錯樣例:
NaNsystem:access_denied前端

圖片描述

2. 配置 lib/WxPay.Config.php文件api

最主要配置一下四項:
const APPID = '';
const MCHID = '';
const KEY = '';
const APPSECRET = '';
APPID 和 APPSECRET均可以在微信後臺中找到。
MCHID 在申請微信支付後發來的郵件中能夠找到,KEY 則根據郵件提示微信

3. 拜訪官方demo函數

圖片描述

咱們首先須要的是 JSAPI支付。可是看代碼 index.php 最下面的連接。他默認是個demo的連接,改成咱們自定義的便可
固然你也能夠直接寫死爲本身的訪問連接。測試

<ul>
  <li style="background-color:#FF7F24"><a href="<?php echo 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'].'example/jsapi.php';?>">JSAPI支付</a></li>
  <li style="background-color:#698B22"><a href="<?php echo 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'].'example/micropay.php';?>">刷卡支付</a></li>
  <li style="background-color:#8B6914"><a href="<?php echo 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'].'example/native.php';?>">掃碼支付</a></li>
  <li style="background-color:#CDCD00"><a href="<?php echo 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'].'example/orderquery.php';?>">訂單查詢</a></li>
  <li style="background-color:#CD3278"><a href="<?php echo 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'].'example/refund.php';?>">訂單退款</a></li>
  <li style="background-color:#848484"><a href="<?php echo 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'].'example/refundquery.php';?>">退款查詢</a></li>
  <li style="background-color:#8EE5EE"><a href="<?php echo 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'].'example/download.php';?>">下載訂單</a></li>
</ul>

官方給的demo整個思路就很明朗了
若是說要設計成api接口
能夠參考一下我的的微信支付

api開發思路:
引入:
這三個文件網站

require __DIR__ . '/wechat_pay/example/WxPay.JsApiPay.php';

require __DIR__ . '/wechat_pay/example/log.php';

require __DIR__ . '/wechat_pay/lib/WxPay.Api.php';

api接口設置:ui

//請求支付參數

case 10098:

 $openid= isset($_REQUEST['openid'])?$_REQUEST['openid']:error();

 $SetTotal_fee= isset($_REQUEST['SetTotal_fee'])?$_REQUEST['SetTotal_fee']:error();

 wx_pay($openid,$SetTotal_fee);

break;
這裏SetTotal_fee是支付的金額 openid是密鑰

//發起支付的函數

function  wx_pay($openid,$SetTotal_fee){
//初始化日誌
$logHandler= new CLogFileHandler("../logs/".date('Y-m-d').'.log');
$log = Log::Init($logHandler, 15);
//①、獲取用戶openid
$tools = new JsApiPay();
$openId =$openid;
//②、統一下單
$input = new WxPayUnifiedOrder();
$input->SetBody("這裏寫產品名字");
$input->SetAttach("test");
$input->SetOut_trade_no(WxPayConfig::MCHID.date("YmdHis"));
$input->SetTotal_fee($SetTotal_fee*100);
$input->SetTime_start(date("YmdHis"));
$input->SetTime_expire(date("YmdHis", time() + 600));
$input->SetGoods_tag("test");
$input->SetNotify_url("xxxx/jsapi.php");//這裏寫發起支付的頁面
$input->SetTrade_type("JSAPI");
$input->SetOpenid($openId);
$order = WxPayApi::unifiedOrder($input);
$jsApiParameters = $tools->GetJsApiParameters($order);
echo $jsApiParameters;
}

前端調用:

function jsApiCall()    
{    
WeixinJSBridge.invoke(    
'getBrandWCPayRequest',    
,
function(res){    
WeixinJSBridge.log(res.err_msg);//存儲異常    
alert(res.err_code+res.err_desc+res.err_msg); 
//後面能夠寫上執行失敗的東西
}
);
}

function callpay()   
{
if (typeof WeixinJSBridge == "undefined"){
    if( document.addEventListener ){
        document.addEventListener('WeixinJSBridgeReady', jsApiCall, false);
    }else if (document.attachEvent){ 
        document.attachEvent('WeixinJSBridgeReady', jsApiCall); 
        document.attachEvent('onWeixinJSBridgeReady', jsApiCall);
    }
}else{
        jsApiCall();
} 
}

若是這篇文章對你有用,能夠點個贊或者是收藏,算是對做者的鼓勵~

另附上小弟網站。。。www.entercode.cn 推廣一波...

相關文章
相關標籤/搜索