導航:首頁 > 編程語言 > 微信小程序支付php

微信小程序支付php

發布時間:2022-09-04 06:39:56

㈠ 微擎是什麼

微擎是一家開源的公眾平台SAAS領域技術服務提供商,成立於2013年7月,總部位於安徽宿州。

微擎是一款基於WEB2.0(php+Mysql)技術架構,免費開源的公眾平台管理系統,一款致力於將小程序和公眾號商業化、智慧化、場景化的自助引擎。

微擎提供公眾號、微信小程序、支付寶小程序、網路熊掌號、移動端APP、PC網站等 多種功能,一站式滿足用戶招商加盟、分銷代理、營銷推廣、餐飲酒旅、訊息獲取等各個環節的需求,真正實現智慧化商業服務。

服務效率度:從破除體制、機制障礙入手,不斷梳理改造業務流程,整合優化經營要素配置,傳遞「精細化運營」理念,改進服務模式,落實精細管理,加速推進公眾平台生態360度動態發展。

(1)微信小程序支付php擴展閱讀:

品牌文化

品牌使命:讓公眾平台更智慧

品牌口號抄:再小的品牌,也有自己的微擎

品牌定位:公眾平台SAAS領域技術服務提供商

品牌願景:以「大品牌、大產品、大客戶」為願景

品牌價值觀:誠信、專業、穩健、創新

誠信:以誠信作為言行的准則,取信於客戶,取信於社會;嚴格自律,奉行高尚的職業准則,不為一時的利益背棄道德和誠信。

專業:注重卓越的專業知識和豐富的行業經驗,致力於不斷提升專業水平;平衡安全和敏捷,幫助客戶快速實現信息化目標。

穩健:對事業充滿熱情,以行業的高標准創造價值,以優良的服務成為行業的典範;重視健全內部管理體制和完善風險防範機制,使公司運營保持持續增長的良性發展態勢。

創新:積極主動了解客戶日益多元化的服務需求,預測市場變化,提出創新的解決方案;運用敏銳的市場洞察與持續的進取精神,推陳出新,提高服務水平。

㈡ php如何實現微信小程序支付及退款

其實,壓根沒必要自己動手開發,很難實現;
可以藉助小程序第三方平台進行搭建;

㈢ 微信小程序怎麼開發

您好,您提到的「微信小程序怎麼開發」開發之前必須要完成和注冊認證。如果是個人或者小公司想開發微信小程序,也可以找微信認證第三方開發商,比如贏在移動、正品科技等。


1、微信小程序注冊


在微信公眾平台官網首頁,按照提示點擊右上角的「立即注冊」按鈕,裡面總過有12步,按照要求提交就可以了。


5、了解「獲取用戶信息」介面請查看開發文檔—API—開放介面—用戶信息。


綁定小程序流程說明:登錄微信開放平台、—管理中心—公眾帳號—綁定公眾帳號


注意:微信開放平台帳號必須完成開發者資質認證才可以綁定小程序。

㈣ 微信小程序開發者工具用什麼語言

1、支持的前端開發語言有:

前端主要是用WXML、WXSS以及javaScript來開發。本質上就是JS+CSS+HTML5,不過不能直接用HTML標簽,微信提供一個組件庫,沒有DOM和其他瀏覽器上的API;網路、Canvas等也重新包裝過。【點擊查看小程序開發底價】

2、支持的後端開發語言有:

其實理論上後端用什麼語言都可以,只要能夠從伺服器上獲取到數據,例如:PHP、Java或者Python來開發。一般對於企業而言,都是採用php程序開發微信小程序;技術要求高一點的可以採用java程序開發。

想要了解更多有關小程序開發的相關信息,推薦咨詢豬八戒網。豬八戒網成立於2006年,是中國領先的企業服務平台,服務交易獨角獸企業。豬八戒網現有注冊用戶2800萬、在全國布局線下數字化創業園區超過100個。十餘年來,累計有10萬余個人通過平台孵化成長為公司,超過100萬人通過平台實現靈活就業,千萬企業通過平台解決專業服務需求;專業性值得選擇。

㈤ tp中微信小程序上傳怎麼寫

第一步 先把文件夾的那兩個圖片 配置成一樣的路徑 除了域名要改 其他保持一致。
第二步 把 Weixinpay 這個文件夾放在 \ThinkPHP\Library\Vendor 將Weixinpay文件夾放置到這個Vendor文件夾中

第三步 把 WxJsAPIController.class.php 這個php文件 \Home\Controller 這裡面
第四步 把 WxJsAPI這個文件夾 放置在 \Home\View 這個裡面
第五步 成功調用微信公眾號支付功能
jsApiCall.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0'/>
<title>微信安全支付</title>

<script type="text/javascript">
//調用微信JS api 支付
function jsApiCall()
{
WeixinJSBridge.invoke(
'getBrandWCPayRequest',
<?php echo $jsApiParameters; ?>,
function(res){
WeixinJSBridge.log(res.err_msg);
if(res.err_msg == "get_brand_wcpay_request:ok"){
//alert(res.err_code+res.err_desc+res.err_msg);
/*這里寫如果支付成功的話執行什麼操作*/
}else{
//返回跳轉到訂單詳情頁面
alert(支付失敗);

}
}
);
}
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();
}

}

</script>
</head>
<body>
<button style="width:210px; height:30px; background-color:#FE6714; border:0px #FE6714 solid; cursor: pointer; color:white; font-size:16px;" type="button" onclick="jsApiCall()" id="asd" >購買</button>

</p>
</body>
</html>

WxJsAPIController.class.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189

<?php

namespace Home\Controller;
use Think\Controller;

class WxJsAPIController extends Controller{
public function _initialize()
{
//引入WxPayPubHelper
vendor('Weixinpay.WxPayPubHelper');
}

public function jsApiCall()
{

//使用jsapi介面
$jsApi = new \JsApi_pub();

//=========步驟1:網頁授權獲取用戶openid============
//通過code獲得openid
//
//

if (!isset($_GET['code']))
{
//觸發微信返回code碼
$rUrl=urlencode(C('WxConfig.JS_API_CALL_URL').'/id/'.$_GET[id]);
/*注意一下這個 id 是為了可以成功的傳個 id值才這樣寫 如果你不需要的話也可以直接寫成
$rUrl=urlencode(C('WxConfig.JS_API_CALL_URL'));

$this->redirect('WxJsAPI/jsApiCall',array('id' =>55),0, '頁面跳轉中...');
我是這樣穿這個id過來的值得你們也可以自己改成其他的來傳這個id 或是刪除他不要
*/

$url = $jsApi->createOauthUrlForCode($rUrl);
// echo $url;exit();
Header("Location: $url");
}else
{

//獲取code碼,以獲取openid
$code = $_GET['code'];
$jsApi->setCode($code);
$openid = $jsApi->getOpenId();//openid 這里是為了獲取用戶當前的openid 如果你有做微信登陸的話就可以無視他。
}

//=========步驟2:使用統一支付介面,獲取prepay_id============
//使用統一支付介面
$unifiedOrder = new \UnifiedOrder_pub();

/*此處做資料庫的查詢 這里操作資料庫把產品信息顯示出來*/

/*此處做資料庫的查詢 這里操作資料庫把產品信息顯示出來*/

//設置統一支付介面參數
//設置必填參數
//appid已填,商戶無需重復填寫
//mch_id已填,商戶無需重復填寫
//noncestr已填,商戶無需重復填寫
//spbill_create_ip已填,商戶無需重復填寫
//sign已填,商戶無需重復填寫
//

$NOTIFY_URL="你的域名/index.php/Home/WxJsAPI/notify";

$unifiedOrder->setParameter("openid",$openid);//openid
$unifiedOrder->setParameter("body",'商品的名字');//商品描述
$unifiedOrder->setParameter("out_trade_no",'123456789');//商戶訂單號
$unifiedOrder->setParameter("total_fee",1*100);//總金額 微信的錢1*100等於1
$unifiedOrder->setParameter("notify_url",$NOTIFY_URL);//通知地址

$unifiedOrder->setParameter("trade_type","JSAPI");//交易類型
//非必填參數,商戶可根據實際情況選填
//$unifiedOrder->setParameter("sub_mch_id","XXXX");//子商戶號
//$unifiedOrder->setParameter("device_info","XXXX");//設備號
//$unifiedOrder->setParameter("attach","XXXX");//附加數據
//$unifiedOrder->setParameter("time_start","XXXX");//交易起始時間
//$unifiedOrder->setParameter("time_expire","XXXX");//交易結束時間
//$unifiedOrder->setParameter("goods_tag","XXXX");//商品標記
//$unifiedOrder->setParameter("openid","XXXX");//用戶標識
//$unifiedOrder->setParameter("proct_id","XXXX");//商品ID

$prepay_id = $unifiedOrder->getPrepayId();

// echo $prepay_id;exit();
//=========步驟3:使用jsapi調起支付============
$jsApi->setPrepayId($prepay_id);

$jsApiParameters = $jsApi->getParameters();

$WEB_HOST='你的域名';//填寫的話 如 <a rel="nofollow" href="http://nicaicai.imwork.net" target="_blank">http://nicaicai.imwork.net</a> 最後面不用加 /
$this->assign('HOSTS',$WEB_HOST);
$this->assign('jsApiParameters',$jsApiParameters);
$this->display();
//echo $jsApiParameters;

}

public function notify()
{
//使用通用通知介面
$notify = new \Notify_pub();

//存儲微信的回調
$xml = $GLOBALS['HTTP_RAW_POST_DATA'];

$notify->saveData($xml);

//驗證簽名,並回應微信。
//對後台通知交互時,如果微信收到商戶的應答不是成功或超時,微信認為通知失敗,
//微信會通過一定的策略(如30分鍾共8次)定期重新發起通知,
//盡可能提高通知的成功率,但微信不保證通知最終能成功。
if($notify->checkSign() == FALSE){

$notify->setReturnParameter("return_code","FAIL");//返回狀態碼
$notify->setReturnParameter("return_msg","簽名失敗了啊");//返回信息
}else{
$notify->setReturnParameter("return_code","SUCCESS");//設置返回碼
}
$returnXml = $notify->returnXml();
echo $returnXml;

//==商戶根據實際情況設置相應的處理流程,此處僅作舉例=======

//以log文件形式記錄回調信息
// $log_ = new Log_();
$log_name= ROOT."/Public/notify_url.log";//log文件路徑

if($notify->checkSign() == TRUE)
{
if ($notify->data["return_code"] == "FAIL") {

//此處應該更新一下訂單狀態,商戶自行增刪操作
log_result($log_name,"【通信出錯】:\n".$xml."\n");
}
elseif($notify->data["result_code"] == "FAIL"){

//此處應該更新一下訂單狀態,商戶自行增刪操作
log_result($log_name,"【業務出錯】:\n".$xml."\n");
}
else{

/*查看支付成功的返回值請去 <a rel="nofollow" href="https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1" target="_blank">https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1</a> */

$xmlss=$notify->data["out_trade_no"];//訂單號
$total_fee=$notify->data['total_fee'];//訂單總金額,單位為分,詳見支付金額

/*更新訂單狀態這里寫資料庫的操作*/

/*更新訂單狀態這里寫資料庫的操作*/

//此處應該更新一下訂單狀態,商戶自行增刪操作
log_result($log_name,"【支付成功】:\n".$xml."\n");
}

//商戶自行增加處理流程,
//例如:更新訂單狀態
//例如:資料庫操作
//例如:推送支付完成信息
}
}

// 列印log
public function log_result($file,$word)
{
$fp = fopen($file,"a");
flock($fp, LOCK_EX) ;
fwrite($fp,"執行日期:".strftime("%Y-%m-%d-%H:%M:%S",time())."\n".$word."\n\n");
flock($fp, LOCK_UN);
fclose($fp);
}
}
?>
希望我的回答可以幫到您哦

㈥ 微信小程序訂單如何退款

一. 支付
支付主要分為幾個步驟:
1前端攜帶支付需要的數據(商品id,購買數量等)發起支付請求
2後端在接收到支付請求後,處理支付數據,然後攜帶處理後的數據請求 微信伺服器 的 支付統一下單介面
3後端接收到上一步請求微信伺服器的返回數據,再次處理,然後返回前端讓前端可以開始支付。
4前端進行支付動作
5前端支付完成後,微信伺服器會向後端發送支付通知(也就是微信要告訴你客戶已經付過錢了),後端根據這個通知確定支付完成,然後就去做支付完成後的相應動作,比如修改訂單狀態,添加交易日誌啊等等。
從這幾個步驟可以看出,後端主要的作用就是將支付需要的數據傳給微信伺服器,再根據微信伺服器的響應確定支付是否完成。
這個流程還是蠻容易理解的。形象的說,前端就是個顧客,後端就是店家,微信伺服器的統一下單介面就像收銀員。顧客跟店家說,我是誰誰誰,現在我要付多少多少錢給你買什麼什麼。店家就跟收銀員說,那個誰誰誰要付多少錢,你准備收錢吧。收銀員收到錢後,就去告訴店家,我已經收到錢了,你給他東西吧。
下面就詳細的說明一下 各個步驟的具體實現。
1. 前端請求支付
前端請求支付,就是簡單的攜帶支付需要的數據,例如用戶標識,支付金額,支付訂單 ID 等等跟 **你的業務邏輯有關** 或者跟 **下一步請求微信伺服器支付統一下單介面需要的數據有關** 的相關數據,使用微信小程序的 wx.request( ) 去請求後端的支付介面。
2. 後端請求微信伺服器
後端接收到前端發送的支付請求後,可以進行一下相關驗證,例如判斷一下用戶有沒有問題,支付金額對不對等等。
在驗證沒什麼問題,可以向微信伺服器申請支付之後,後端需要使用 微信規定的數據格式 去請求微信的支付統一下單介面。
微信規定的請求數據:
這需要較多代碼實現。因為需要的數據個數較多,而且還需要加密並以 XML 格式發送。
首先,有以下數據是使用小程序支付必須提供給微信伺服器的參數。
小程序 appid。寫小程序的大概沒有不知道這個的。。。
用戶標識 openid。也就是用戶的小程序標識,在我上篇博客中說明了如何獲取。
商戶號 mch_id 。申請開通微信支付商戶認證成功後微信發給你的郵件里有
商戶訂單號 out_trade_no 。商戶為這次支付生成的訂單號
總金額 total_fee 。訂單總金額,很重要的一點是單位是分,要特別注意。
微信伺服器回調通知介面地址 notify_url。微信確認錢已經到賬後,會往這個地址多次發送消息,告訴你顧客已經付完錢了,你需要返回消息給微信表示你已經收到了通知。。這個地址不能有埠號,同時要能直接接受POST方法請求。
交易類型 trade_type 。微信小程序支付此值統一為 JSAPI
商品信息 Body。類似"騰訊-游戲"這種格式
終端IP地址 spbill_create_ip 。終端地址IP,也就是請求支付的 IP 地址。
隨機字元串 nonce_str 。需要後端隨機生成的字元串用於保證數據安全。微信要求不長於32位。
簽名 sign 。使用上面的所有參數進行相應處理加密生成簽名。(具體處理方式可見下文代碼,可直接復用。)
在處理好以上所有數據後,將這些數據以 XML 格式整理並以 POST 方法發送到 微信支付統一下單介面 https://api.mch.weixin.qq.com/pay/unifiedorder 。
3.後端接受微信伺服器返回數據
微信伺服器在接收到支付數據之後,如果數據沒有問題,其會返回用於支付的相應數據,其中非常重要的是 名稱為 prepay_id 的數據欄位,需要將此數據返回前端,前端才能繼續支付。
因此,在後端接收到微信伺服器的返回數據後,需要進行相應的處理,最終返回到前端如下數據:
appid 不需多說
timeStamp 當前時間戳
nonceStr 隨機字元串
package 就是上面提到的 prepay_id,不過切記格式如 「prepay_id= prepay_id_item「。否則會導致錯誤。
signType 加密方式,一般應該是 MD5
paySign 對以上數據進行相應處理並加密。
到這里,後端的支付介面已經完成了接收前端支付請求,並返回了前端支付所需數據的功能。
4. 前端發起支付
前端在接收到返回數據後,使用 wx.requestPayment() 來請求發起支付。此 API 需要的對象參數各項值就是我們上一步返回的各個數據。
5.後端接受微信伺服器回調
前端完成支付後,微信伺服器確認支付已經完成。就會向第一步中設置的回調地址發送通知。後端的接收回調介面在接收到通知後,就可以判斷支付是否完成,從而決定後續動作。
需要注意的是,在接收到微信伺服器的回調通知後,根據通知的result_code欄位判斷支付是否成功。在接受到成功的通知後,後端需要返回success數據向微信伺服器告知已得到回調通知。否則微信伺服器會不停的向後端發送消息。另外微信的通知是以XML格式發送的,在接受處理時需要注意。
微信的大概支付流程就是這樣。以下是PHP語法的微信支付類,可以比照上面的步驟介紹,加深理解。在需要支付時,直接傳入參數實例化此類再調用類的 pay 方法即可。
//微信支付類
class WeiXinPay{
//=======【基本信息設置】=====================================
//微信公眾號身份的唯一標識
protected $APPID = appid;//填寫您的appid。微信公眾平台里的
protected $APPSECRET = secret;
//受理商ID,身份標識
protected $MCHID = '11111111';//商戶id
//商戶支付密鑰Key
protected $KEY = '';
//回調通知介面
protected $APPURL = 'https://smart.afei.com/receivesuc';
//交易類型
protected $TRADETYPE = 'JSAPI';
//商品類型信息
protected $BODY = 'wx/book';
//微信支付類的構造函數
function __construct($openid,$outTradeNo,$totalFee){
$this->openid = $openid; //用戶唯一標識
$this->outTradeNo = $outTradeNo; //商品編號
$this->totalFee = $totalFee; //總價
}

//微信支付類向外暴露的支付介面
public function pay(){
$result = $this->weixinapp();
return $result;
}

//對微信統一下單介面返回的支付相關數據進行處理
private function weixinapp(){
$unifiedorder=$this->unifiedorder();
$parameters=array(
'appId'=>$this->APPID,//小程序ID
'timeStamp'=>''.time().'',//時間戳
'nonceStr'=>$this->createNoncestr(),//隨機串
'package'=>'prepay_id='.$unifiedorder['prepay_id'],//數據包
'signType'=>'MD5'//簽名方式
);
$parameters['paySign']=$this->getSign($parameters);
return $parameters;
}
/*
*請求微信統一下單介面
*/
private function unifiedorder(){
$parameters = array(
'appid' => $this->APPID,//小程序id
'mch_id'=> $this->MCHID,//商戶id
'spbill_create_ip'=>$_SERVER['REMOTE_ADDR'],//終端ip
'notify_url'=>$this->APPURL, //通知地址
'nonce_str'=> $this->createNoncestr(),//隨機字元串
'out_trade_no'=>$this->outTradeNo,//商戶訂單編號
'total_fee'=>floatval($this->totalFee), //總金額
'open_id'=>$this->openid,//用戶openid
'trade_type'=>$this->TRADETYPE,//交易類型
'body' =>$this->BODY, //商品信息
);
$parameters['sign'] = $this->getSign($parameters);
$xmlData = $this->arrayToXml($parameters);
$xml_result = $this->postXmlCurl($xmlData,'https://api.mch.weixin.qq.com/pay/unifiedorder',60);
$result = $this->xmlToArray($xml_result);
return $result;
}
//數組轉字元串方法
protected function arrayToXml($arr){
$xml = "<xml>";
foreach ($arr as $key=>$val)
{
if (is_numeric($val)){
$xml.="<".$key.">".$val."</".$key.">";
}else{
$xml.="<".$key."><![CDATA[".$val."]]></".$key.">";
}
}
$xml.="</xml>";
return $xml;
}
protected function xmlToArray($xml){
$array_data = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
return $array_data;
}

//發送xml請求方法
private static function postXmlCurl($xml, $url, $second = 30)
{
$ch = curl_init();
//設置超時
curl_setopt($ch, CURLOPT_TIMEOUT, $second);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); //嚴格校驗
//設置header
curl_setopt($ch, CURLOPT_HEADER, FALSE);
//要求結果為字元串且輸出到屏幕上
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
//post提交方式
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 20);
curl_setopt($ch, CURLOPT_TIMEOUT, 40);
set_time_limit(0);
//運行curl
$data = curl_exec($ch);
//返回結果
if ($data) {
curl_close($ch);
return $data;
} else {
$error = curl_errno($ch);
curl_close($ch);
throw new WxPayException("curl出錯,錯誤碼:$error");
}
}
/*
* 對要發送到微信統一下單介面的數據進行簽名
*/
protected function getSign($Obj){
foreach ($Obj as $k => $v){
$Parameters[$k] = $v;
}
//簽名步驟一:按字典序排序參數
ksort($Parameters);
$String = $this->formatBizQueryParaMap($Parameters, false);
//簽名步驟二:在string後加入KEY
$String = $String."&key=".$this->KEY;
//簽名步驟三:MD5加密
$String = md5($String);
//簽名步驟四:所有字元轉為大寫
$result_ = strtoupper($String);
return $result_;
}
/*
*排序並格式化參數方法,簽名時需要使用
*/
protected function formatBizQueryParaMap($paraMap, $urlencode)
{
$buff = "";
ksort($paraMap);
foreach ($paraMap as $k => $v)
{
if($urlencode)
{
$v = urlencode($v);
}
//$buff .= strtolower($k) . "=" . $v . "&";
$buff .= $k . "=" . $v . "&";
}
$reqPar;
if (strlen($buff) > 0)
{
$reqPar = substr($buff, 0, strlen($buff)-1);
}
return $reqPar;
}
/*
* 生成隨機字元串方法
*/
protected function createNoncestr($length = 32 ){
$chars = "";
$str ="";
for ( $i = 0; $i < $length; $i++ ) {
$str.= substr($chars, mt_rand(0, strlen($chars)-1), 1);
}
return $str;
}
}
以上就是微信支付的相關流程。在理清思路後,流程還是比較清晰和簡單的。重點在於需要注意一些細節問題,例如數據格式,加密方法等。
下面說一下微信小程序退款的具體實現
二.退款
小程序退款的流程和付款相似,但有一些細節上的不同。
首先退款的步驟通常如下:
1.用戶前端點擊退款按鈕後,後端接收到用戶的退款請求通過商城後台呈現給商戶,商戶確定允許退款後,後端再發起向微信退款介面的請求來請求退款。
2.後端向微信退款介面發送請求後,得到響應信息,確定退款是否完成,根據退款是否完成再去進行改變訂單狀態等業務邏輯。
退款的步驟相對微信支付來說比較簡單。
值得注意的有以下兩點:
1.向微信退款介面請求退款後,根據得到的響應是可以直接確定退款是否完成的。不再需要設置專門的回調介面等待微信通知。當然如果需要也是可以在微信商戶平台設置回調介面接受從而接受微信回調的,但並不是必須的。
2.退款請求需要在請求伺服器安裝微信提供的安全證書,也就是說,發起退款請求相比較支付請求在請求時請求方法不能復用,因為微信退款需要攜帶證書的請求,此證書可在申請微信商戶號成功後從微信商戶平台自行下載, Linux下的PHP開發環境的證書只需要放在網站根目錄的cert文件夾中即可。其他開發環境可能需要導入操作。
下面講解一下退款的具體步驟
一. 用戶發起退款請求
用戶在前端發起退款請求,後端接收到退款請求,將相應訂單標記為申請退款,展示在後台.商戶查看後,如果同意退款再進行相應操作.此後才進入真正的退款流程.
二. 商戶發起退款請求
商戶同意退款後,後端即向微信提供的退款 API 發起請求.
同請求微信支付API一樣.退款請求也需要將需要的參數進行簽名後以XML發送到微信的退款API [https://api.mch.weixin.qq.com/pay/refund](https://api.mch.weixin.qq.com/pay/refund)
退款請求需要的參數如下(多個參數在支付API請求時也有使用):
1.小程序 appid。
2.商戶號 mch_id 。申請開通微信支付商戶認證成功後微信發給你的郵件里有
3.商戶訂單號 out_trade_no 。退款訂單在支付時生成的訂單號
4.退款訂單號 out_refund_no 。由後端生成的退款單號,需要保證唯一,因為多個同樣的退款單號只會退款一次。
5.總金額 total_fee 。訂單總金額,單位為分。
6.退款金額 refund_fee 需要退款的金額,單位同樣為分
7.操作員 op_user_id .與商戶號相同即可
8.隨機字元串 nonce_str 。同支付請求
9.簽名 sign 。使用上面的所有參數進行相應處理加密生成簽名。(具體處理方式與支付相同,可直接復用。)
三. 退款完成
在發起退款請求後,就可以直接根據請求的響應XML中的 result_code欄位來判斷退款是否成功,從而對訂單狀態進行處理和後續操作。不需要像支付那樣等待另一個介面的通知來確定請求狀態。當然如上文所說,如果需要微信伺服器發送通知到後端的話,可以到微信商戶平台進行設置。

退款因為流程與支付大同小異,因此退款的PHP類我選擇了直接繼承支付類,
代碼如下,注意區分退款請求方法postXmlSSLCurl和支付請求方法postXmlCurl的區別,這也就是上文提到的退款需要的雙向證書的使用。
````
class WinXinRefund extends WeiXinPay{
protected \$SSLCERT_PATH = 'cert/apiclient_cert.pem';//證書路徑
protected \$SSLKEY_PATH = 'cert/apiclient_key.pem';//證書路徑
protected \$opUserId = '1234567899';//商戶號

function __construct($openid,$outTradeNo,$totalFee,$outRefundNo,$refundFee){
//初始化退款類需要的變數
$this->openid = $openid;
$this->outTradeNo = $outTradeNo;
$this->totalFee = $totalFee;
$this->outRefundNo = $outRefundNo;
$this->refundFee = $refundFee;
}
public function refund(){
//對外暴露的退款介面
$result = $this->wxrefundapi();
return $result;
}
private function wxrefundapi(){
//通過微信api進行退款流程
$parma = array(
'appid'=> $this->APPID,
'mch_id'=> $this->MCHID,
'nonce_str'=> $this->createNoncestr(),
'out_refund_no'=> $this->outRefundNo,
'out_trade_no'=> $this->outTradeNo,
'total_fee'=> $this->totalFee,
'refund_fee'=> $this->refundFee,
'op_user_id' => $this->opUserId,
);
$parma['sign'] = $this->getSign($parma);
$xmldata = $this->arrayToXml($parma);
$xmlresult = $this->postXmlSSLCurl($xmldata,'https://api.mch.weixin.qq.com/secapi/pay/refund');
$result = $this->xmlToArray($xmlresult);
return $result;
}
//需要使用證書的請求
function postXmlSSLCurl($xml,$url,$second=30)
{
$ch = curl_init();
//超時時間
curl_setopt($ch,CURLOPT_TIMEOUT,$second);
//這里設置代理,如果有的話
//curl_setopt($ch,CURLOPT_PROXY, '8.8.8.8');
//curl_setopt($ch,CURLOPT_PROXYPORT, 8080);
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);
//設置header
curl_setopt($ch,CURLOPT_HEADER,FALSE);
//要求結果為字元串且輸出到屏幕上
curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);
//設置證書
//使用證書:cert 與 key 分別屬於兩個.pem文件
//默認格式為PEM,可以注釋
curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');
curl_setopt($ch,CURLOPT_SSLCERT, $this->SSLCERT_PATH);
//默認格式為PEM,可以注釋
curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM');
curl_setopt($ch,CURLOPT_SSLKEY, $this->SSLKEY_PATH);
//post提交方式
curl_setopt($ch,CURLOPT_POST, true);
curl_setopt($ch,CURLOPT_POSTFIELDS,$xml);
$data = curl_exec($ch);
//返回結果
if($data){
curl_close($ch);
return $data;
}
else {
$error = curl_errno($ch);
echo "curl出錯,錯誤碼:$error"."<br>";
curl_close($ch);
return false;
}
}}
三. 總結
以上就是關於微信支付和退款的流程及相關知識的介紹。文中的 PHP類 均封裝直接可用。
因為微信支付和退款涉及的東西較為繁雜,很多人直接看官方文檔可能會一頭霧水,所以看過此文了解流程和要點後,再去看微信官方文檔。一方面可以更清晰的了解小程序的支付和退款流程。另一方面,本文因為篇幅有限及作者能力有限,肯定有無暇顧及或有所紕漏之處。為求穩妥,還是需要多看看官方開發文檔。畢竟事涉支付,出個BUG可不是小事。微信小店小程序是微信官方推出的一款免費的商城小程序,但是微信小店小程序不支持實時訂單通知,商家只能在網頁上手動刷新才能知道新的訂單。如何才能實時接收訂單提醒並且在手機上發貨呢?要麼通過第三方服務(成本較大),要麼自己搞定(零成本)。

微信在今年9月份推出了小程序雲開發平台,簡單的說:騰訊為小程序提供免費的伺服器。我們利用騰訊免費的伺服器,就可以實現訂單訂單通知、手機發貨、訂單自動列印等一切功能。

先看視頻吧!這是弄好之後的樣子。可以實時接收訂單通知,自動列印訂單,手機上發貨。仔細看,還有更多功能,更多亮點。如果覺得還行,可以繼續往下看建設步驟。

建設步驟如下:

復用公眾號資質快速創建小程序

申請這個小程序的目的在於獲取騰訊免費伺服器,有了伺服器,什麼都可以搞了。具體申請步驟在這里就不詳細說了,可以自行網路上搜索。


獲取AppId和開發者密碼

要獲取公眾號的AppId和密碼、微信小店AppID,創建的小程序AppId和密碼。這些信息將會導入到創建的小程序中。有了這些信息,小程序才能為微信小店提供服務。

下載微信開發者工具,新建小程序項目

在微信開發者工具中,新建項目。將微信小店小程序關聯到這個小程序裡面來,可以維信搜一搜:采雲。你會看到小程序運行非常快速,碾壓市面上80%的商城小程序。


新建小程序項目


關聯微信小店小程序

訂單提醒

開發建設好之後,商家就可以實時收到微信提醒了。分為2種提醒方式:服務通知和訂單自動列印。服務通知免費,如果是訂單自動列印的話,商家需要購買雲列印機。(就是那種外賣列印機)


服務通知提醒


訂單自動列印提醒

手機上發貨

在收到訂單提醒後,商家可以直接點擊進入小程序發貨界面。並且購買者也能收到發貨提醒。


更多功能(分享朋友圈,會員管理,員工管理等)還沒有寫出來,後期會繼續更新。通過視頻,可以看到更多信息。一定要看哦。

㈦ 微信小程序怎麼向外部php文件傳遞參數

PAY頁面往 js_api_call.php 傳值 獲取不到的問題
echo 是可以echo出來的 但是
這里不寫死就會報錯 $key0$
<?php
/**
* JS_API支付demo
* ====================================================
* 在微信瀏覽器裡面打開H5網頁中執行JS調起支付。介面輸入輸出數據格式為JSON。
* 成功調起支付需要三個步驟:
* 步驟1:網頁授權獲取用戶openid
* 步驟2:使用統一支付介面,獲取prepay_id
* 步驟3:使用jsapi調起支付
*/
//獲取信息
@$name="支付測試-包包";
@$price=0.01*100;
@$hyid=$_GET['hyid'];
@$out_trade_no=$_GET['num'];//訂單號
include_once("../WxPayPubHelper/WxPayPubHelper.php");
//使用jsapi介面
$jsApi = new JsApi_pub();
//=========步驟1:網頁授權獲取用戶openid============
//通過code獲得openid
if (!isset($_GET['code']))
{
//觸發微信返回code碼
$url = $jsApi->createOauthUrlForCode(WxPayConf_pub::JS_API_CALL_URL);
Header("Location: $url");
}else
{
//獲取code碼,以獲取openid
$code = $_GET['code'];
$jsApi->setCode($code);
$openid = $jsApi->getOpenId();
}
//=========步驟2:使用統一支付介面,獲取prepay_id============
//使用統一支付介面
$unifiedOrder = new UnifiedOrder_pub();
//設置統一支付介面參數
//設置必填參數
//appid已填,商戶無需重復填寫
//mch_id已填,商戶無需重復填寫
//noncestr已填,商戶無需重復填寫
//spbill_create_ip已填,商戶無需重復填寫
//sign已填,商戶無需重復填寫
$unifiedOrder->setParameter("openid","$openid");//商品描述
$unifiedOrder->setParameter("body","$name");//商品描述
//自定義訂單號,此處僅作舉例
$timeStamp = time();
$out_trade_no = WxPayConf_pub::APPID."$timeStamp";
$unifiedOrder->setParameter("out_trade_no","$out_trade_no");//商戶訂單號
$unifiedOrder->setParameter("total_fee","$price");//總金額
$unifiedOrder->setParameter("notify_url","http://youjia.pinpai365.cn/weixinpay/demo/notify_url.php");//通知地址
$unifiedOrder->setParameter("trade_type","JSAPI");//交易類型
//非必填參數,商戶可根據實際情況選填
//$unifiedOrder->setParameter("sub_mch_id","XXXX");//子商戶號
//$unifiedOrder->setParameter("device_info","XXXX");//設備號
//$unifiedOrder->setParameter("attach","XXXX");//附加數據
//$unifiedOrder->setParameter("time_start","XXXX");//交易起始時間
//$unifiedOrder->setParameter("time_expire","XXXX");//交易結束時間
//$unifiedOrder->setParameter("goods_tag","XXXX");//商品標記
$unifiedOrder->setParameter("attach","2");//會員ID
$prepay_id = $unifiedOrder->getPrepayId();
//=========步驟3:使用jsapi調起支付============
$jsApi->setPrepayId($prepay_id);
$jsApiParameters = $jsApi->getParameters();
//echo $jsApiParameters;
?>
<html>
<head>
<meta charset="utf-8">
<title>支付頁面</title>
<script type="text/javascript">
//調用微信JS api 支付
function jsApiCall()
{
WeixinJSBridge.invoke(
'getBrandWCPayRequest',
<?php echo $jsApiParameters; ?>,
function(res){
WeixinJSBridge.log(res.err_msg);
if(res.err_msg == "get_brand_wcpay_requestk"){
window.location.href='/shop/successful.php?spmc=<?php echo $name; ?>&&price=<?php echo $price; ?>';
//history.go(-1);
}else{
window.location.href='/shop/pay.php';
}
}
);
}
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();
}
</script>
</head>
</html>

㈧ 微信小程序,PHP支付的問題

$weixinpay = new WeixinPay($appid,$openid,$mch_id,$key,$out_trade_no,$body,$total_fee,$root);
$body,應該是圖中標紅框的值

㈨ 小程序開發需要哪些技術

小程序開發需要用到的技術如下:
1、微信小程序wxml,這個語言的編程理念和html網頁的編程技術是類似的。
2、微信小程序之wxss,就是微信的css。微信把網頁編程里運用的css,換成了自己的開發語言,wxss,其實主要的實現思想理念也和網頁的開發技術基本沒什麼不同,也是一些標簽的簡單替換,大部分和原先的css、基本不誤。
3、微信小程序之js,如果你想開發一款微信小程序學會微信小程序的js是必須要精通的。
4、微信小程序之json,簡單來說json就是微信小程序的一門主次的界面,工程師們可以通過json控制上下菜單欄、主次的頁面展示順序,不過用的頻率不高,只是在基本的小程序的框架構架才會應用到。
其實,小程序類似於H5面,提供了視圖層描述語言,需要掌握WXML 和 WXSS 以及基於JavaScript的邏輯層框架,這里wxml相當於html,wxss相當於css。

㈩ 微信小程序開發需要准備哪些資料

微信小程序開發,有自己的開發語言和開發工具,首先你要會這個。
其次,後端,你用java、php都行。
然後就沒了。

閱讀全文

與微信小程序支付php相關的資料

熱點內容
unix網路編程卷4 瀏覽:805
找靚機app下單什麼時候發貨 瀏覽:411
android一個應用兩個進程 瀏覽:801
linux硬碟復制 瀏覽:806
php圖片伺服器搭建 瀏覽:798
下載壓縮文件怎麼打開 瀏覽:192
新建文件夾叫什麼名字 瀏覽:565
windows20的開機命令 瀏覽:332
微信一般在電腦的那個文件夾 瀏覽:509
go在win7下編譯特別慢 瀏覽:256
光遇ios耳機安卓為什麼沒有 瀏覽:904
小米手機桌面文件夾經常自動散開 瀏覽:607
小米電話手錶用什麼app進行設置 瀏覽:265
虛擬列印機pdf下載 瀏覽:671
jdk編譯運行方法 瀏覽:459
android執行shell命令 瀏覽:349
程序員頭像女 瀏覽:57
有什麼可以變頭發顏色的app 瀏覽:935
玩具解壓屋游戲下載 瀏覽:849
我的世界拔刀劍伺服器地址id 瀏覽:891