![【移動應用開發(fā)技術(shù)】微信小程序如何實現(xiàn)支付功能_第1頁](http://file4.renrendoc.com/view/cf18ed3cdc278233ef7b20ee58586f7d/cf18ed3cdc278233ef7b20ee58586f7d1.gif)
![【移動應用開發(fā)技術(shù)】微信小程序如何實現(xiàn)支付功能_第2頁](http://file4.renrendoc.com/view/cf18ed3cdc278233ef7b20ee58586f7d/cf18ed3cdc278233ef7b20ee58586f7d2.gif)
![【移動應用開發(fā)技術(shù)】微信小程序如何實現(xiàn)支付功能_第3頁](http://file4.renrendoc.com/view/cf18ed3cdc278233ef7b20ee58586f7d/cf18ed3cdc278233ef7b20ee58586f7d3.gif)
![【移動應用開發(fā)技術(shù)】微信小程序如何實現(xiàn)支付功能_第4頁](http://file4.renrendoc.com/view/cf18ed3cdc278233ef7b20ee58586f7d/cf18ed3cdc278233ef7b20ee58586f7d4.gif)
![【移動應用開發(fā)技術(shù)】微信小程序如何實現(xiàn)支付功能_第5頁](http://file4.renrendoc.com/view/cf18ed3cdc278233ef7b20ee58586f7d/cf18ed3cdc278233ef7b20ee58586f7d5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
【移動應用開發(fā)技術(shù)】微信小程序如何實現(xiàn)支付功能
這篇文章主要為大家展示了“微信小程序如何實現(xiàn)支付功能”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓在下帶領(lǐng)大家一起研究并學習一下“微信小程序如何實現(xiàn)支付功能”這篇文章吧。開發(fā)前必讀主要流程小程序前端發(fā)送求參請求接受請求封裝“統(tǒng)一下單”獲取package小程序接受“統(tǒng)一下單”獲取的package值帶入wx.requestPayment發(fā)起支付請求準備工具申請小程序微信支付拿到小程序微信支付的商戶號及設(shè)置秘鑰注意:小程序就只需要這兩步,如果是web的話還需要設(shè)置支付目錄授權(quán)域名,文檔里面也有寫的:/wik..統(tǒng)一下單官方文檔:/wik.../**
*
統(tǒng)一訂單
*/
public
function
unifiedorder(){
//
以下配置是必填項,如有其它需求請自行配置
$config
=
array(
'appid'
=>
'xxxxxxx',//這里是小程序appid
'mch_id'
=>
'xxxxxxx',//商戶ID
'nonce_str'
=>
$this->getNonceStr(),//隨機字符串
'body'
=>
'這里是測試
-
測試',//請按照文檔要求填寫合格名稱
'out_trade_no'
=>
time().$this->getNonceStr(2),//流水單號
'total_fee'
=>
'20',//金額,分為單位,這里是0.2元
'spbill_create_ip'
=>
'23',//當前IP
'notify_url'
=>
'',//請恕我愚昧,我沒搞懂他有什么用
'trade_type'
=>
'JSAPI',//必須填寫JSAPI
'openid'
=>
'xxxxxxxx'//當前用戶的openid,在trade_type=JSAPI的時候,此項就變成必填項了
);
$config['sign']
=
$this->getSignPay($config);
$xmlData
=
$this->ToXml($config);//轉(zhuǎn)成xml數(shù)據(jù)
$postData
=
$this->http_post($xmlData);
$arrayData
=
$this->FromXml($postData);
if($arrayData['return_code']
==
'SUCCESS'
||
$arrayData['result_code']
==
'SUCCESS'){
return
$arrayData['prepay_id'];//重點來了:走了這么多路,就為了這個值。到這一步就證明成功一多半了。
}else{
return
$arrayData;//返回錯誤
}
}
/**
*
獲取簽名
*/
public
function
getSignPay($config){
$key
=
'xxxxxxx';//商戶秘鑰,就是自己生成的32位密碼
$strA
=
'appid='.$config['appid'].'&body='.$config['body'].'&mch_id='.$config['mch_id'].'&nonce_str='.$config['nonce_str'].'¬ify_url='.$config['notify_url'].'&spbill_create_ip'.$config['spbill_create_ip'].'&total_fee='.$config['total_fee'].'&trade_type='.$config['trade_type'];//ASCII
字典序
$strB
=
$strA.'&key='.$key;
$sign
=
strtoupper(md5($strB));//大寫MD5
return
$sign;
}
/**
*
隨機字符串
32位
*/
public
function
getNonceStr($length
=
32){
$chars
=
"abcdefghijklmnopqrstuvwxyz0123456789";
$str
="";
for
(
$i
=
0;
$i
<
$length;
$i++
)
{
$str
.=
substr($chars,
mt_rand(0,
strlen($chars)-1),
1);
}
return
$str;
}
/**
*
array轉(zhuǎn)XML
*/
public
function
ToXml($data){
if(!is_array($data)
||
count($data)
<=
0){
throw
new
WxPayException("數(shù)組數(shù)據(jù)異常!");
}
$xml
=
"<xml>";
foreach
($data
as
$key=>$val){
$xml.="<".$key.">".$val."</".$key.">";
}
$xml.="</xml>";
return
$xml;
}
/**
*
xml轉(zhuǎn)array
*/
public
function
FromXml($xml){
if(!$xml){
throw
new
WxPayException("xml數(shù)據(jù)異常!");
}
libxml_disable_entity_loader(true);
$this->values
=
json_decode(json_encode(simplexml_load_string($xml,
'SimpleXMLElement',
LIBXML_NOCDATA)),
true);
return
$this->values;
}
/**
*
post
請求
*/
public
function
http_post($url,$param,$post_file=false){
$oCurl
=
curl_init();
if(stripos($url,"https://")!==FALSE){
curl_setopt($oCurl,
CURLOPT_SSL_VERIFYPEER,
FALSE);
curl_setopt($oCurl,
CURLOPT_SSL_VERIFYHOST,
false);
curl_setopt($oCurl,
CURLOPT_SSLVERSION,
1);
//CURL_SSLVERSION_TLSv1
}
if
(PHP_VERSION_ID
>=
50500
&&
class_exists('\CURLFile'))
{
$is_curlFile
=
true;
}
else
{
$is_curlFile
=
false;
if
(defined('CURLOPT_SAFE_UPLOAD'))
{
curl_setopt($oCurl,
CURLOPT_SAFE_UPLOAD,
false);
}
}
if
(is_string($param))
{
$strPOST
=
$param;
}elseif($post_file)
{
if($is_curlFile)
{
foreach
($param
as
$key
=>
$val)
{
if
(substr($val,
0,
1)
==
'@')
{
}
}
}
$strPOST
=
$param;
}
else
{
$aPOST
=
array();
foreach($param
as
$key=>$val){
$aPOST[]
=
$key."=".urlencode($val);
}
$strPOST
=
join("&",
$aPOST);
}
curl_setopt($oCurl,
CURLOPT_URL,
$url);
curl_setopt($oCurl,
CURLOPT_RETURNTRANSFER,
1
);
curl_setopt($oCurl,
CURLOPT_POST,true);
curl_setopt($oCurl,
CURLOPT_POSTFIELDS,$strPOST);
$sContent
=
curl_exec($oCurl);
$aStatus
=
curl_getinfo($oCurl);
curl_close($oCurl);
if(intval($aStatus["http_code"])==200){
return
$sContent;
}else{
return
false;
}
}好了現(xiàn)在已經(jīng)獲取到了prepay_id的值,我們的統(tǒng)一下單就算完成了,其實我更樂意叫他數(shù)據(jù)封小程序微信支付官方文檔:https://developers.weixin.qq先來一個插曲,首先我們小程序的前端需要去觸發(fā)pay,實現(xiàn)的功能肯定是要點擊小程序的一個觸發(fā),然后才能支付對吧,pay:function(e){
//這里面使用post去請求。然后通過我接下來要寫的API支付代碼獲取小程序支付參數(shù)
success:function(res){
wx.requestPayment({
'timeStamp':toString(res.timeStamp),//這里轉(zhuǎn)字符串,這里被坑過,不轉(zhuǎn)的話可能會出現(xiàn)total_fee為空
'nonceStr':toString(res.nonceStr),
'package':toString(res.package),
'signType':'MD5',
'paySign':toString(res.paySign),
success:function(res){
console.log(res);//這里可以跳轉(zhuǎn)到帶參地址
},
fail:function(res){
('支付失敗',res);
},
complete:function(){
('支付觸發(fā)回調(diào)',res);
}
})
}
}api支付也就是上面小程序代碼的后端請求地址/**
*
api組裝數(shù)據(jù)
*/
public
function
payApiBlack(){
$appid
=
'xxxxxx';//小程序appid,上面有重復,不過這樣比較直觀
$timeStamp
=
time();
$nonceStr
=
$this->getNonceStr();//這是調(diào)用統(tǒng)一下單里面的方法,為了直觀,我把這些代碼都寫在了一個類里
$package
=
'prepay_id='.$this->unifiedorder();
$signType
=
'MD5';
$key
=
'xxxxxx';//這里是商戶秘鑰,32位,同上面也有
$strA
=
'appId='.$appid.'&nonceStr=
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年水位恒定閥項目可行性研究報告
- 2025年明裝面巾紙盒項目可行性研究報告
- 2025年手動式快速水口項目可行性研究報告
- 二零二五年度磷礦開采與加工一體化合同3篇
- 2025年填門縫門墊項目可行性研究報告
- 2025年農(nóng)業(yè)棚膜項目可行性研究報告
- 2025至2030年骨痛康貼項目投資價值分析報告
- 2025至2030年電腦標牌項目投資價值分析報告
- 2025至2030年大銀杯項目投資價值分析報告
- 2025年全球及中國雙面涂層服務行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 高三日語一輪復習日語助詞「に」和「を」的全部用法課件
- 2024年山東省高考政治試卷真題(含答案逐題解析)
- 煙葉復烤能源管理
- 食品安全管理員考試題庫298題(含標準答案)
- 執(zhí)業(yè)醫(yī)師資格考試《臨床執(zhí)業(yè)醫(yī)師》 考前 押題試卷絕密1 答案
- 2024年山東濟寧初中學業(yè)水平考試地理試卷真題(含答案詳解)
- 社會保險課件教學課件
- 訂婚協(xié)議書手寫模板攻略
- 準備單元 雪地上的“足跡”(教學設(shè)計)-2023-2024學年五年級下冊科學大象版
- 宇航用商業(yè)現(xiàn)貨(COTS)器件保證指南-編制說明
- 音樂學科閱讀方案
評論
0/150
提交評論