




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
【移動應(yīng)用開發(fā)技術(shù)】微信支付PHPSDK之實現(xiàn)微信公眾號支付的方法
這篇文章將為大家詳細(xì)講解有關(guān)微信支付PHPSDK之實現(xiàn)微信公眾號支付的方法,在下覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。這里假設(shè)你已經(jīng)申請完微信支付1.微信后臺配置
如圖我們先進(jìn)行測試,所以先把測試授權(quán)目錄和測試白名單添加上。測試授權(quán)目錄是你要發(fā)起微信請求的哪個文件所在的目錄。例如jsapi發(fā)起請求一般是jsapi.php所在目錄為測試目錄,測試白名單即開發(fā)人員的微信號。正式的支付授權(quán)目錄不能和測試的一樣否則會報錯。不填寫或者填錯授權(quán)目錄以及測試白名單都會報錯。報錯樣例:NaNsystem:access_denied不在測試白名單2.配置lib/WxPay.Config.php文件最主要配置一下四項:constAPPID='';constMCHID='';constKEY='';constAPPSECRET='';APPID和APPSECRET都可以在微信后臺中找到。MCHID在申請微信支付后發(fā)來的郵件中可以找到,KEY則根據(jù)郵件提示去商戶平臺配置即可。3.訪問起始index.php首先訪問index.php你可以看到界面我們首先需要的是JSAPI支付。但是看代碼index.php最下面的鏈接。他默認(rèn)是個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>當(dāng)然你也可以直接寫死為自己的訪問鏈接。4.JSAPI支付必要代碼解析:$logHandler=
new
CLogFileHandler("../logs/".date('Y-m-d').'.log');
$log
=
Log::Init($logHandler,
15);調(diào)用日志類可以通過$log->DEBUG(‘test‘);打印調(diào)試信息。其實也可以直接使用$Log::DEBUG(‘test‘);來調(diào)試$tools
=
new
JsApiPay();
$openId
=
$tools->GetOpenid();主要是為了獲取openid其中GetOpenid()函數(shù)定義在文件WxPay.JsApiPay.php文件中public
function
GetOpenid()
{
//通過code獲得openid
if
(!isset($_GET['code'])){
//觸發(fā)微信返回code碼
$baseUrl
=
urlencode('http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].$_SERVER['QUERY_STRING']);
$url
=
$this->CreateOauthUrlForCode($baseUrl);
Header("Location:
$url");
exit();
}
else
{
//獲取code碼,以獲取openid
$code
=
$_GET['code'];
$openid
=
$this->getOpenidFromMp($code);
return
$openid;
}
}$baseUrl其實就是為了在跳轉(zhuǎn)回來這個頁面。
可以繼續(xù)跟蹤函數(shù)CreateOauthUrlForCode()
其實就是通過微信的Auth3.0來獲取Openid參考鏈接:/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html這就需要你把微信的網(wǎng)頁授權(quán)接口也設(shè)置好。獲取到Openid就可以調(diào)用微信支付的統(tǒng)一下單接口了?;氐轿募sapi.php如下代碼$input
=
new
WxPayUnifiedOrder();
$input->SetBody("test");
$input->SetAttach("test");
$input->SetOut_trade_no(WxPayConfig::MCHID.date("YmdHis"));
$input->SetTotal_fee("1");
$input->SetTime_start(date("YmdHis"));
$input->SetTime_expire(date("YmdHis",
time()
+
600));
$input->SetGoods_tag("test");
$input->SetNotify_url("/example/notify.php");
$input->SetTrade_type("JSAPI");
$input->SetOpenid($openId);
$order
=
WxPayApi::unifiedOrder($input);
echo
'<font
color="#f00"><b>統(tǒng)一下單支付單信息</b></font><br/>';
printf_info($order);
$jsApiParameters
=
$tools->GetJsApiParameters($order);這里面的代碼:$input->SetAttach("test");如果把值改為$input->SetAttach("testthisisattach");就會存在bug后面再說,其實這個參數(shù)不是必須的干脆可以去掉。代碼:$input->SetNotify_url(/example/notify.php);是設(shè)置接收支付結(jié)果通知的Url這里是默認(rèn)的demo鏈接我們可以設(shè)置成我們的:$input->SetNotify_url(dirname('http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']).'/notify.php');當(dāng)然你也可以選擇直接寫死。其中的函數(shù)unifiedOrder($input)可以到WxPay.Api.php中文件跟蹤,其實就是調(diào)用統(tǒng)一下單接口。在WxPay.Api.php中需要更改的一處代碼是://異步通知url未設(shè)置,則使用配置文件中的url
if(!$inputObj->IsNotify_urlSet()){
$inputObj->SetNotify_url(WxPayConfig::NOTIFY_URL);//異步通知url
}就是當(dāng)沒設(shè)置notifyUrl的時候回去配置文件中找,但是配置文件中根本沒有設(shè)置。所以你可以選擇在配置文件WxPay.Config.php中加上這個配置,也可以直接寫一個默認(rèn)的notify鏈接。函數(shù)GetJsApiParameters()是獲取jsApi支付的參數(shù)給變量$jsApiParameters方便在下面的Js中調(diào)用jsapi.php中js的代碼:function
jsApiCall()
{
WeixinJSBridge.invoke(
'getBrandWCPayRequest',
<?php
echo
$jsApiParameters;
?>,
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();
}
}其中點擊立即支付按鈕調(diào)用的就是callpay()函數(shù),他有會調(diào)用jsApiCall()函數(shù)打開支付程序。此后輸入密碼完成支付。在完成支付頁面點擊完成會回到這個支付頁面,并彈出支付成功的提示框這個其實就是js函數(shù)jsApiCall里面的alter彈出的對話框其中res.err_msg為get_brand_wcpay_request:ok表明前端判斷的支付成功,我們可以根據(jù)這個將支付跳轉(zhuǎn)到成功頁面。但是這個并不可信。確認(rèn)是否支付成功還是應(yīng)當(dāng)通過notify.php處理業(yè)務(wù)邏輯。5.支付結(jié)果通知notify.php其實這個頁面最主要的代碼就兩行$notify
=
new
PayNotifyCallBack();
$notify->Handle(false);其中大部分邏輯在Handle函數(shù)中處理文件WxPay.Notify.phpfinal
public
function
Handle($needSign
=
true)
{
$msg
=
"OK";
//當(dāng)返回false的時候,表示notify中調(diào)用NotifyCallBack回調(diào)失敗獲取簽名校驗失敗,此時直接回復(fù)失敗
$result
=
WxpayApi::notify(array($this,
'NotifyCallBack'),
$msg);
if($result
==
false){
$this->SetReturn_code("FAIL");
$this->SetReturn_msg($msg);
$this->ReplyNotify(false);
return;
}
else
{
//該分支在成功回調(diào)到NotifyCallBack方法,處理完成之后流程
$this->SetReturn_code("SUCCESS");
$this->SetReturn_msg("OK");
}
$this->ReplyNotify($needSign);
}主要代碼:$result
=
WxpayApi::notify(array($this,
'NotifyCallBack'),
$msg);跟蹤函數(shù)notify文件WxPay.Api.phppublic
static
function
notify($callback,
&$msg)
{
//獲取通知的數(shù)據(jù)
$xml
=
$GLOBALS['HTTP_RAW_POST_DATA'];
//如果返回成功則驗證簽名
try
{
$result
=
WxPayResults::Init($xml);
}
catch
(WxPayException
$e){
$msg
=
$e->errorMessage();
return
false;
}
return
call_user_func($callback,
$result);
}通過$GLOBALS[‘HTTP_RAW_POST_DATA‘];獲取同志數(shù)據(jù)然后Init函數(shù)驗證簽名等。驗簽成功運行代碼return
call_user_func($callback,
$result);即調(diào)用了一個回調(diào)函數(shù),NotifyCallBack()函數(shù)并傳遞參數(shù)$result在NotifyCallBack函數(shù)中會調(diào)用我們重寫的NotifyProcess()函數(shù)(此函數(shù)在notify.php中被重寫)NotifyProcess()判斷也沒有問題就會設(shè)置返回success的xml信息$this->SetReturn_code("SUCCESS");
$this->SetReturn_msg("OK");并最終調(diào)用函數(shù)$this->ReplyNotify($needSign);
echosuccess的結(jié)果函數(shù)ReplyNotify需要修改一處代碼:final
private
function
ReplyNotify($ne
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 流動貨攤的城鄉(xiāng)一體化實踐考核試卷
- 海洋油氣開采工程技術(shù)難點與解決方案考核試卷
- 塑料注塑件脫模劑應(yīng)用考核試卷
- 機(jī)床制造業(yè)品牌建設(shè)與市場推廣考核試卷
- 煤炭產(chǎn)業(yè)轉(zhuǎn)型升級與市場機(jī)遇把握考核試卷
- 滑動軸承的智能制造與大數(shù)據(jù)分析考核試卷
- 林業(yè)節(jié)能減排政策效應(yīng)分析考核試卷
- 木片加工廢棄物資源化利用考核試卷
- 木片在環(huán)保家具市場的競爭力分析考核試卷
- 合成橡膠在航空航天器部件的應(yīng)用考核試卷
- 2025屆成都市2022級高中畢業(yè)班第二次診斷性檢測語文試題及答案
- 駱駝祥子-(一)-劇本
- 《工程勘察設(shè)計收費標(biāo)準(zhǔn)》(2002年修訂本)
- 在建項目汛前安全生產(chǎn)檢查表
- 中國風(fēng)傳統(tǒng)文化家風(fēng)家訓(xùn)主題PPT模板
- 華為終端合作手機(jī)硬件測試標(biāo)準(zhǔn)-V10.4發(fā)布版本
- 三年級英語家長會發(fā)言稿15篇
- 外科手術(shù)基本器械及其使用
- 植被砼護(hù)坡綠化施工組織設(shè)計
- GPON組網(wǎng)與華為MA5800-X15OLT配置
- (高清版)建筑地面工程防滑技術(shù)規(guī)程JGJ_T 331-2014
評論
0/150
提交評論