【移動應(yīng)用開發(fā)技術(shù)】微信支付PHP SDK之實現(xiàn)微信公眾號支付的方法_第1頁
【移動應(yīng)用開發(fā)技術(shù)】微信支付PHP SDK之實現(xiàn)微信公眾號支付的方法_第2頁
【移動應(yīng)用開發(fā)技術(shù)】微信支付PHP SDK之實現(xiàn)微信公眾號支付的方法_第3頁
【移動應(yīng)用開發(fā)技術(shù)】微信支付PHP SDK之實現(xiàn)微信公眾號支付的方法_第4頁
【移動應(yīng)用開發(fā)技術(shù)】微信支付PHP SDK之實現(xiàn)微信公眾號支付的方法_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論