




版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國卷簾門行業(yè)競爭格局與前景發(fā)展策略分析報告
- 2025-2030年中國醫(yī)藥包裝行業(yè)市場運營狀況及發(fā)展趨勢分析報告
- 2025-2030年中國凍干制劑行業(yè)運行趨勢及投資戰(zhàn)略研究報告
- 2025-2030年中國乳品包裝設(shè)計市場發(fā)展前景及未來趨勢預(yù)測報告
- 2025-2030年中國中國體外循環(huán)儀器市場運行新形勢與投資前景報告
- 2025-2030年中國三文魚行業(yè)需求分析及發(fā)展前景預(yù)測報告
- 2025-2030年中國APET包裝盒市場發(fā)展?fàn)顩r及營銷戰(zhàn)略研究報告
- 中學(xué)教職工勞動合同書范本
- 2025年企事業(yè)單位食堂承包運營合同范文
- 2025年品牌授權(quán)合同
- 【醫(yī)院管理分享】:牙科手機(jī)清洗保養(yǎng)方法案例分享實踐課件
- 《新能源材料與器件》教學(xué)課件-04電化學(xué)能源材料與器件
- 二手新能源汽車充電安全承諾書
- 醫(yī)學(xué)課件:介入放射學(xué)(全套課件328張)
- 水泥攪拌樁記錄表格范本
- DL∕T 458-2020 板框式旋轉(zhuǎn)濾網(wǎng)
- GB∕T 8163-2018 輸送流體用無縫鋼管
- 短視頻:策劃制作與運營課件
- 水閘設(shè)計步驟計算書(多表)
- PowerPoint使用技巧培訓(xùn)課件(共35張)
- SMA瀝青路面的設(shè)計與施工
評論
0/150
提交評論