【移動應(yīng)用開發(fā)技術(shù)】小程序?qū)崿F(xiàn)微信支付的方法_第1頁
【移動應(yīng)用開發(fā)技術(shù)】小程序?qū)崿F(xiàn)微信支付的方法_第2頁
【移動應(yīng)用開發(fā)技術(shù)】小程序?qū)崿F(xiàn)微信支付的方法_第3頁
【移動應(yīng)用開發(fā)技術(shù)】小程序?qū)崿F(xiàn)微信支付的方法_第4頁
【移動應(yīng)用開發(fā)技術(shù)】小程序?qū)崿F(xiàn)微信支付的方法_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

【移動應(yīng)用開發(fā)技術(shù)】小程序?qū)崿F(xiàn)微信支付的方法

這篇文章主要介紹小程序?qū)崿F(xiàn)微信支付的方法,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!小程序?qū)崿F(xiàn)微信支付的方法:前期準(zhǔn)備:1.開通了微信支付,并且小程序綁定了微信支付;2.準(zhǔn)備好小程序的appid,微信支付的商戶號,支付秘鑰。商戶系統(tǒng)和微信支付系統(tǒng)主要交互:1、小程序內(nèi)調(diào)用登錄接口,獲取到用戶的openid2、調(diào)用商戶服務(wù)器支付統(tǒng)一下單接口,進(jìn)行預(yù)支付/**

*

預(yù)支付請求接口(POST)

*

@param

string

$openid

openid

*

@param

string

$body

商品簡單描述

*

@param

string

$order_sn

訂單編號

*

@param

string

$total_fee

金額

*

@return

json的數(shù)據(jù)

*/

public

function

prepay(){

$config

=

$this->config;

$openid

=

I('post.openid');

$body

=

I('post.body');

$order_sn

=

I('post.order_sn');

$total_fee

=

I('post.total_fee');

//統(tǒng)一下單參數(shù)構(gòu)造

$unifiedorder

=

array(

'appid' =>

$config['appid'],

'mch_id' =>

$config['pay_mchid'],

'nonce_str' =>

self::getNonceStr(),

'body' =>

$body,

'out_trade_no' =>

$order_sn,

'total_fee' =>

$total_fee

*

100,

'spbill_create_ip' =>

get_client_ip(),

'notify_url' =>

'https://'.$_SERVER['HTTP_HOST'].'/Api/Wxpay/notify',

'trade_type' =>

'JSAPI',

'openid' =>

$openid

);

$unifiedorder['sign']

=

self::makeSign($unifiedorder);

//請求數(shù)據(jù)

$xmldata

=

self::array2xml($unifiedorder);

$url

=

'/pay/unifiedorder';

$res

=

self::curl_post_ssl($url,

$xmldata);

if(!$res){

self::return_err("Can't

connect

the

server");

}

//

這句file_put_contents是用來查看服務(wù)器返回的結(jié)果

測試完可以刪除了

//file_put_contents(APP_ROOT.'/Statics/log1.txt',$res,FILE_APPEND);

$content

=

self::xml2array($res);

if(strval($content['result_code'])

==

'FAIL'){

self::return_err(strval($content['err_code_des']));

}

if(strval($content['return_code'])

==

'FAIL'){

self::return_err(strval($content['return_msg']));

}

self::return_data(array('data'=>$content));

//$this->ajaxReturn($content);

}3、調(diào)用商戶服務(wù)器再次簽名接口,返回支付數(shù)據(jù)/**

*

進(jìn)行支付接口(POST)

*

@param

string

$prepay_id

預(yù)支付ID(調(diào)用prepay()方法之后的返回數(shù)據(jù)中獲取)

*

@return

json的數(shù)據(jù)

*/

public

function

pay(){

$config

=

$this->config;

$prepay_id

=

I('post.prepay_id');

$data

=

array(

'appId' =>

$config['appid'],

'timeStamp' =>

time(),

'nonceStr' =>

self::getNonceStr(),

'package' =>

'prepay_id='.$prepay_id,

'signType' =>

'MD5'

);

$data['paySign']

=

self::makeSign($data);

$this->ajaxReturn($data);

}4、小程序內(nèi)完成支付,商戶服務(wù)器接收支付回調(diào)通知小程序端代碼:wx.requestPayment({

'timeStamp':

'',

'nonceStr':

'',

'package':

'',

'signType':

'MD5',

'paySign':

'',

'success':function(res){

},

'fail':function(res){

}

})服務(wù)器回調(diào)通知://微信支付回調(diào)驗證

public

function

notify(){

$xml

=

$GLOBALS['HTTP_RAW_POST_DATA'];

//

這句file_put_contents是用來查看服務(wù)器返回的XML數(shù)據(jù)

測試完可以刪除了

//file_put_contents(APP_ROOT.'/Statics/log2.txt',$res,FILE_APPEND);

//將服務(wù)器返回的XML數(shù)據(jù)轉(zhuǎn)化為數(shù)組

$data

=

self::xml2array($xml);

//

保存微信服務(wù)器返回的簽名sign

$data_sign

=

$data['sign'];

//

sign不參與簽名算法

unset($data['sign']);

$sign

=

self::makeSign($data);

//

判斷簽名是否正確

判斷支付狀態(tài)

if

(

($sign===$data_sign)

&&

($data['return_code']=='SUCCESS')

&&

($data['result_code']=='SUCCESS')

)

{

$result

=

$data;

//獲取服務(wù)器返回的數(shù)據(jù)

$order_sn

=

$data['out_trade_no']; //訂單單號

$openid

=

$data['openid']; //付款人openID

$total_fee

=

$data['total_fee']; //付款金額

$transaction_id

=

$data['transaction_id'];

//微信支付流水號

//更新數(shù)據(jù)庫

$this->updateDB($order_sn,$openid,$total_fee,$transaction_id);

}else{

$result

=

false;

}

//

返回狀態(tài)給微信服務(wù)器

if

($result)

{

$str='<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>';

}else{

$str='<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[簽名失敗]]></return_msg></xml>';

}

echo

$str;

return

$result;

}小程序端完整代碼如下:/**

*

支付函數(shù)

*

@param

{[type]}

_payInfo

[description]

*

@return

{[type]}

[description]

*/

pay:function(_payInfo,success,fail){

var

payInfo

=

{

body:'',

total_fee:0,

order_sn:''

}

Object.assign(payInfo,

_payInfo);

if(payInfo.body.length==0){

wx.showToast({

title:'支付信息描述錯誤'

})

return

false;

}

if(payInfo.total_fee==0){

wx.showToast({

title:'支付金額不能0'

})

return

false;

}

if(payInfo.order_sn.length==0){

wx.showToast({

title:'訂單號不能為空'

})

return

false;

}

var

This

=

this;

This.getOpenid(function(openid){

payInfo.openid=openid;

This.request({

url:'api/pay/prepay',

data:payInfo,

success:function(res){

var

data

=

res.data;

console.log(data);

if(!data.status){

wx.showToast({

title:data['errmsg']

})

return

false;

}

This.request({

url:'api/pay/pay',

data:{prepay_id:data.data.data.prepay_id},

success:function(_payResult){

var

payResult

=

_payResult.data;

console.log(payResult);

wx.requestPayment({

'timeStamp':

payResult.timeStamp.toString(),

'nonceStr':

payResult.nonceStr,

'package':

payResult.package,

'signType':

payResult.signType,

'paySign':

payRe

溫馨提示

  • 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

提交評論