国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

香港云服务器
服務器之家 - 編程語言 - PHP教程 - PHP實現微信支付(jsapi支付)和退款(無需集成支付SDK)流程教程詳解

PHP實現微信支付(jsapi支付)和退款(無需集成支付SDK)流程教程詳解

2019-10-17 11:06江南極客 PHP教程

本篇文章給大家介紹PHP實現微信支付(jsapi支付)和退款(無需集成支付SDK)流程教程詳解,使用了微信官方給的php版本的sdk,但是在使用過程中有很多問題,今天給大家講講不集成支付SDK直接調用支付接口實現支付和退款,感興趣的朋

之前有寫過幾篇文章將微信支付和退款:

1.PHP實現微信支付(jsapi支付)流程
2.ThinkPHP中實現微信支付(jsapi支付)流程
3.PHP實現微信申請退款

這幾篇都是使用了微信官方給的PHP版本的SDK,進行支付的時候寫代碼可以省不少事,步驟也挺簡化,但是集成SDK有很多坑,很多人說引入的SDK老報錯,或者說官方SDK本身有不少錯誤,改起來很麻煩,也確實挺麻煩的,對于新手搞支付很容易被繞進去,那么今天就來講講不集成支付SDK直接調用支付接口實現支付和退款。

前期準備:

1.當然了,還是要有一個微信認證服務號,并且開通了微信支付;

2.在微信商戶后臺配置好支付授權目錄,同時準備好支付的Api證書(支付用不到,退款的時候使用)

3.調用接口支付的話,必須要先知道該用戶的openid,所以要先知道怎么獲取用戶的openid,這個也很簡單,我之前也有文章講怎么獲取用戶的openid,詳見文章微信公眾號獲取用戶的openid。

好了,話不多說,直接貼上主要代碼:

01/**
02 * 微信支付請求接口(POST)
03 * @param string $openid openid
04 * @param string $body 商品簡單描述
05 * @param string $order_sn 訂單編號
06 * @param string $total_fee 金額
07 * @return json的數據
08 */
09public function wxpay($openid,$total_fee,$body,$order_sn){
10 $config = $this->config;
11 //統一下單參數構造
12 $unifiedorder = array(
13 'appid' => $config['appid'],
14 'mch_id' => $config['mch_id'],
15 'nonce_str' => self::getNonceStr(),
16 'body' => $body,
17 'out_trade_no' => $order_sn,
18 'total_fee' => $total_fee * 100,
19 'spbill_create_ip' => self::getip(),
20 'notify_url' => 'http://'.$_SERVER['HTTP_HOST'].'/notify.php',
21 'trade_type' => 'JSAPI',
22 'openid' => $openid
23 );
24 $unifiedorder['sign'] = self::makeSign($unifiedorder);
25 //return $unifiedorder;
26 //請求數據,統一下單
27 $xmldata = self::array2xml($unifiedorder);
29 $res = self::curl_post_ssl($url, $xmldata);
30 if(!$res){
31 return array('status'=>0, 'msg'=>"Can't connect the server" );
32 }
33 // 這句file_put_contents是用來查看服務器返回的結果 測試完可以刪除了
34 //file_put_contents('./log.txt',$res,FILE_APPEND);
35 $content = self::xml2array($res);
36 if(strval($content['result_code']) == 'FAIL'){
37 return array('status'=>0, 'msg'=>strval($content['err_code']).':'.strval($content['err_code_des']));
38 }
39 if(strval($content['return_code']) == 'FAIL'){
40 return array('status'=>0, 'msg'=>strval($content['return_msg']));
41 }
42 $time = time();
43 settype($time, "string"); //jsapi支付界面,時間戳必須為字符串格式
44 $resdata = array(
45 'appId' => strval($content['appid']),
46 'nonceStr' => strval($content['nonce_str']),
47 'package' => 'prepay_id='.strval($content['prepay_id']),
48 'signType' => 'MD5',
49 'timeStamp' => $time
50 );
51 $resdata['paySign'] = self::makeSign($resdata);
52 return json_encode($resdata);
53}
54/**
55 * 微信退款(POST)
56 * @param string(28) $transaction_id 在微信支付的時候,微信服務器生成的訂單流水號,在支付通知中有返回
57 * @param string $out_refund_no 商品簡單描述
58 * @param string $total_fee 微信支付的時候支付的總金額(單位:分)
59 * @param string $refund_fee 此次要退款金額(單位:分)
60 * @return string  xml格式的數據
61 */
62public function refund($transaction_id,$out_refund_no,$total_fee,$refund_fee){
63 $config = $this->config;
64 //退款參數
65 $refundorder = array(
66 'appid' => $config['appid'],
67 'mch_id' => $config['mch_id'],
68 'nonce_str' => self::getNonceStr(),
69 'transaction_id'=> $transaction_id,
70 'out_refund_no' => $out_refund_no,
71 'total_fee' => $total_fee * 100,
72 'refund_fee' => $refund_fee * 100
73 );
74 $refundorder['sign'] = self::makeSign($refundorder);
75 //請求數據,進行退款
76 $xmldata = self::array2xml($refundorder);
78 $res = self::curl_post_ssl($url, $xmldata);
79 if(!$res){
80 return array('status'=>0, 'msg'=>"Can't connect the server" );
81 }
82 // 這句file_put_contents是用來查看服務器返回的結果 測試完可以刪除了
83 //file_put_contents('./log3.txt',$res,FILE_APPEND);
84 $content = self::xml2array($res);
85 if(strval($content['result_code']) == 'FAIL'){
86 return array('status'=>0, 'msg'=>strval($content['err_code']).':'.strval($content['err_code_des']));
87 }
88 if(strval($content['return_code']) == 'FAIL'){
89 return array('status'=>0, 'msg'=>strval($content['return_msg']));
90 }
91 return $content;
92}

這是封裝好的類,使用起來也超級簡單:

01<?php
02require_once "wxpay.class.php";
03$config = array(
04 'wxappid' => 'wx123456789876',
05 'mch_id' => '123456789',
06 'pay_apikey' => '123456789876123456789876123456789876'
07);
08$wxpay = new WxPay($config);
09$result = $wxpay->paytest();
10?>
11<html>
12<head>
13 <meta http-equiv="content-type" content="text/html;charset=utf-8"/>
14 <meta name="viewport" content="width=device-width, initial-scale=1"/>
15 <title>江南極客支付</title>
16 <script type="text/javascript">
17 //調用微信JS api 支付
18 function jsApiCall()
19 {
20 WeixinJSBridge.invoke(
21 'getBrandWCPayRequest',<?php echo $result; ?>,
22 function(res){
23 WeixinJSBridge.log(res.err_msg);
24 //alert(res);
25 if(res.err_msg == "get_brand_wcpay_request:ok"){
26  alert("支付成功!");
27 }else if(res.err_msg == "get_brand_wcpay_request:cancel"){
28  alert("用戶取消支付!");
29 }else{
30  alert("支付失敗!");
31 }
32 }
33 );
34 }
35 function callpay()
36 {
37 if (typeof WeixinJSBridge == "undefined"){
38 if( document.addEventListener ){
39 document.addEventListener('WeixinJSBridgeReady', jsApiCall, false);
40 }else if (document.attachEvent){
41 document.attachEvent('WeixinJSBridgeReady', jsApiCall);
42 document.attachEvent('onWeixinJSBridgeReady', jsApiCall);
43 }
44 }else{
45 jsApiCall();
46 }
47 }
48 </script>
49</head>
50<body>
51 <br/>
52 <font color="#9ACD32"><b>該筆訂單支付金額為<span style="color:#f00;font-size:50px">1分</span>錢</b></font><br/><br/>
53 <font color="#9ACD32"><b><span style="color:#f00;font-size:50px;margin-left:40%;">1分</span>錢也是愛</b></font><br/><br/>
54 <div align="center">
55 <button style="width:210px; height:50px; border-radius: 15px;background-color:#FE6714; border:0px #FE6714 solid; cursor: pointer; color:white; font-size:16px;" type="button" onclick="callpay()" >果斷買買買^_^</button>
56 </div>
57</body>
58</html>

至于支付回調驗證,這里就不過多講了,不明白的可以看ThinkPHP中實現微信支付(jsapi支付)流程,這里詳細講了如何處理回調。

總結

以上所述是小編給大家介紹的PHP實現微信支付(jsapi支付)和退款(無需集成支付SDK)流程教程詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

延伸 · 閱讀

精彩推薦
455
主站蜘蛛池模板: 欧美日韩国产三级 | 久久久精品久久久 | 国产精品久久久久久久浪潮网站 | 亚洲精品影院在线 | 精品久久久久一区二区国产 | 国产精品区二区三区日本 | 国产精品久久久久久久久大全 | 91av导航 | 综合久久av | 久久爱综合| 午夜男人的天堂 | 免费在线看a | 成人在线播放 | 黄在线免费观看 | 国产色 | 国产一区二区在线播放 | 国产精品毛片无码 | 在线精品一区 | 欧美一级毛片日韩一级 | 看欧美一级片 | 最近中文字幕免费观看 | 在线观看中文字幕 | 五月婷婷婷婷 | 国产精品成人国产乱一区 | 狠狠久| 亚洲免费视频网 | 久久久久久久久久久久国产精品 | 欧美a在线看 | 精品一级 | 成人久久一区 | 欧美日韩亚洲一区二区 | 亚洲视频一区在线观看 | 精品少妇一区二区三区日产乱码 | 国产一区二区三区视频在线观看 | 干干人人 | 九九精品视频在线观看 | 亚洲国产成人精品久久 | 中文字幕不卡一区 | 成人永久免费视频 | 97国产一区二区精品久久呦 | 欧美狠狠 |