php做一個微信退款,PHP實現微信退款功能

大家好,我是小編,最近在調微信退款接口,發現有許多坑,更大家分享一下

① 要是在測試的時候,網頁提示 curl 58 說明 證書的路徑出現問題(這里要填物理路徑,也就是絕對路徑)

②網頁提示curl 52 說明你的證書引入少了,在官方的demo上只有兩個證書?apiclient_cert.pem和?apiclient_key.pem ?你還需要引入一個證書?rootca.pem,這個證書需要你登錄到

你的商戶平臺上下載

3.要是網頁提示 ?"HTTP/1.1 200 OK Server: nginx Date: Tue, 20 Jun 2017 08:08:01 GMT Content-Type: text/plain Content-Length: 852 Connection: keep-alive Keep-Alive: timeout=8說明你的代碼是沒有問題的 ,應該是參數出錯了 我之前錯的地方是把?out_refund_no和?out_trade_no寫的一樣,微信官網上也是這樣寫的 ,但是就是出現問題,我把out_refund_no 修改了一下 發現可以了

注意:金額的單位是分

下面就是我寫的接口

function Home_index() { date_default_timezone_set("Asia/Shanghai"); $date = date("YmdHis"); $appid = ""; $mch_id = ""; $out_trade_no = "14487658021497944120"; $op_user_id = ""; $out_refund_no = $date; $total_fee = "500"; $refund_fee = "500";// $transaction_id = "4009542001201706206596667604"; $key = ""; $nonce_str = nonceStr(); $ref = strtoupper(md5("appid=$appid&mch_id=$mch_id&nonce_str=$nonce_str&op_user_id=$op_user_id" . "&out_refund_no=$out_refund_no&out_trade_no=$out_trade_no&refund_fee=$refund_fee&total_fee=$total_fee" . "&key=$key")); //sign加密MD5 $refund = array( "appid" =>$appid, //應用ID,固定 "mch_id" => $mch_id, //商戶號,固定 "nonce_str" => $nonce_str, //隨機字符串 "op_user_id" => $op_user_id, //操作員 "out_refund_no" => $out_refund_no, //商戶內部唯一退款單號 "out_trade_no" => $out_trade_no, //商戶訂單號,pay_sn碼 1.1二選一,微信生成的訂單號,在支付通知中有返回 // "transaction_id"=>"1",//微信訂單號 1.2二選一,商戶側傳給微信的訂單號 "refund_fee" => $refund_fee, //退款金額 "total_fee" => $total_fee, //總金額 "sign" => $ref//簽名 ); $url = "https://api.mch.weixin.qq.com/secapi/pay/refund"; ; //微信退款地址,post請求 $xml = arrayToXml($refund); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1); //證書檢查 if ($useCert == true) { // 設置證書 curl_setopt($ch, CURLOPT_SSLCERTTYPE, "pem"); curl_setopt($ch, CURLOPT_SSLCERT, dirname(__FILE__) . "/WxPay/cert/apiclient_cert.pem"); curl_setopt($ch, CURLOPT_SSLCERTTYPE, "pem"); curl_setopt($ch, CURLOPT_SSLKEY, dirname(__FILE__) . "/WxPay/cert/apiclient_key.pem"); curl_setopt($ch, CURLOPT_SSLCERTTYPE, "pem"); curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__) . "/WxPay/cert/rootca.pem"); } curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $xml); $xml = curl_exec($ch); // 返回結果0的時候能只能表明程序是正常返回不一定說明退款成功而已 if ($xml) { curl_close($ch); // 把xml轉化成數組 libxml_disable_entity_loader(true); $xmlstring = simplexml_load_string($xml, "SimpleXMLElement", LIBXML_NOCDATA);// var_dump($xmlstring); $result["errNum"] = 0; $result["info"] = object_to_array($xmlstring);// var_dump($result); return $result; } else { $error = curl_errno($ch); curl_close($ch); // 錯誤的時候返回錯誤碼。 $result["errNum"] = $error; return $result; }} function arrayToXml($arr) { $xml = ""; foreach ($arr as $key => $val) { if (is_array($val)) { $xml .= "" . arrayToXml($val) . "" . $key . ">"; } else { $xml .= "" . $val . "" . $key . ">"; } } $xml .= ""; return $xml;}

function object_to_array($obj) { $obj = (array) $obj; foreach ($obj as $k => $v) { if (gettype($v) == "resource") { return; } if (gettype($v) == "object" || gettype($v) == "array") { $obj[$k] = (array) object_to_array($v); } } return $obj;} function nonceStr() { $chars = "abcdefghijklmnopqrstuvwxyz0123456789"; $str = ""; $length = 32; for ($i = 0; $i < $length; $i++) { $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1); } // 隨機字符串 return $str;} Home_index();

趕快添加到你的項目中去吧。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持網頁設計。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/382992.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/382992.shtml
英文地址,請注明出處:http://en.pswp.cn/news/382992.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

php顯示時間,php實現用已經過去多長時間的方式顯示時間

本文實例講述了php用已經過去多長時間的方式顯示時間的方法。分享給大家供大家參考。具體如下&#xff1a;這里以一種可讀性比較好的方式顯示已經過去多長時間&#xff0c;比如&#xff1a;距離現在10秒&#xff0c;距離現在1天等等。function time_is_older_than($t, $check_t…

java中日期計算時間差,java中依據,兩個日期,計算時間差

java中根據&#xff0c;兩個日期&#xff0c;計算時間差。分別獲取兩個時間的毫秒數Date.getTime()&#xff0c;相減&#xff0c;得到的值/1000為秒數&#xff0c;/60*1000為分鐘數&#xff0c;/60*60*1000為小時數。/*** 計算時間差** param begin* param end* return*/public…

php獲取token失敗,微信開發,老是獲取token失敗

微信開發&#xff0c;總是獲取token失敗$appid wx1aabc8673b8f103a;$appsecret 9aa99fc9db9bf1321c1afe05feb29b6c;$url "https://api.weixin.qq.com/cgi-bin/token?grant_typeclient_credential&appid$appid&secret$appsecret";$urlhttps://api.weixin.…

2008下php上傳文件崩潰,php – 當用戶反復嘗試上傳無效文件類型時,網站崩潰

我試圖理解錯誤……我有一個允許用戶上傳CSV的網絡應用程序.如果文件類型不是CSV,則不會發生任何操作,頁面只顯示“無效的文件類型”.如果用戶嘗試上載無效的文件類型并反復單擊觸發處理上載的PHP文件的按鈕,則PHP文件最終會無響應,并且網站崩潰時出現以下錯誤&#xff1a;&quo…

java錯誤1601解決方法,求助解決錯誤

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1610)at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1590)at …

java == hashcode,java中==和equals和hashCode的區別

java中和equals和hashCode的區別 的作用&#xff1a;基本類型&#xff1a;比較的就是值是否相同引用類型&#xff1a;比較的就是地址值是否相同(確切的說&#xff0c;是堆內存地址)equals 的作用:引用類型&#xff1a;默認情況下&#xff0c;比較的是地址值。public boolean eq…

java經典設計模式4,JAVA設計模式(4) 之裝飾設計模式

在現實生活中我們的汽車都具備跑的功能&#xff0c;我們可以不改變汽車原有功能的前提下&#xff0c;把它放入一個裝修廠&#xff0c;開進去讓里面給咱們的車子做一些裝飾&#xff0c;開出來之后呢&#xff0c;就具備了上天的功能了(技術可達是可以的哈)&#xff0c;這就給原來…

java讀取gxk文件,Java中常見的IO流及其使用

Java中IO流分成兩大類&#xff0c;一種是輸入流&#xff0c;所有的輸入流都直接或間接繼承自InputStream抽象類&#xff0c;輸入流作為數據的來源&#xff0c;我們可以通過輸入流的read方法讀取字節數據&#xff1b;另一種是輸出流&#xff0c;所有的輸出流都直接或間接繼承自O…

matlab+voronoin函數,在Voronoi區域中生成隨機點,并創建具有高維數據的Voronoi區域...

我正在使用k-means聚類算法&#xff0c;并且對于每個聚類質心&#xff0c;我試圖為質心生成n維Voronoi區域 . 之后我需要從Voronoi區域生成隨機點 .我已經嘗試使用Matlab / Octave和scipy來獲得n維Voronoi區域 . 但我有兩個問題 .生成頂點和區域后&#xff0c;如何從區域生成隨…

matlab雙縱軸刻度覆蓋問題,求助: matlab雙縱軸換圖問題

非常感謝&#xff01;不過&#xff0c;y2的范圍是-1*(10^6),7*(10^6),但是不等分:(把y1的范圍調成0.4:0.2:5.8也有28個元素&#xff0c;然后y2也有28個元素&#xff0c;但是不等分&#xff0c;是個曲線&#xff0c;而且&#xff0c;這個曲線的值與y1是有關的。數據見附件syms d…

php最新圖片漏洞,2018最新PHP漏洞利用技巧

本文學習了幾種新式的php exploit方法&#xff0c;在此做一筆記文件刪除漏洞, unlink()Phar 反序列化, file*()PHP對象實例化, ReflectionClass()0x01 WordPress Design Flaw Leads to WooCommerce RCEWooCommerce 3.4.6本版本之前存在任意刪除漏洞&#xff0c;因為WordPress的…

php v-for=,Vue中v-for循環節點的實現代碼

本篇文章給大家帶來的內容是關于Vue中v-for循環節點的實現代碼&#xff0c;有一定的參考價值&#xff0c;有需要的朋友可以參考一下&#xff0c;希望對你有所幫助。Title父循環第一次子循環第一次json數據的第幾條數值{{index}}{{indo}}{{bp.index}}{{bp.childName}}let ernew …

matlab尋找向量最小值,matlab – 在排序向量中快速搜索大于x的最小值

由于輸入已經排序,自定義二進制搜索應該有效(您可能需要對邊緣情況進行一些更新,即請求的值小于數組的所有元素)&#xff1a;function [result, res2] binarySearchExample(val)%// Generate example data and sort itN 100000000;a rand(N, 1);a sort(a);%// Run the algo…

搜matlab代碼的網站,LTE小區搜索matlab仿真

【實例簡介】LTE小區搜索過程的matlab仿真&#xff0c;比較詳細&#xff0c;內容不錯【實例截圖】【核心代碼】35738649matlab└── matlab├── Bc.m├── CellSearch.m├── PSS_detection_correction.m├── Tc.m├── absx2.m├── add_header_to_bin.m├── add_h…

php過氣了嗎,留幾手 留幾手過氣原因

1、很多時候&#xff0c;人們做事情只是為了自己&#xff0c;沒有任何理由&#xff0c;沒有任何結果&#xff0c;只是為了滿足一些內心的期望。2、太理智的人&#xff0c;往往愛到一半&#xff0c;本能地退卻。唯一突出的是他的JB。3、怎樣才能自由地睡去女文藝青年&#xff1f…

live2d PHP,Live2dHistoire_setting.php

if(!defined(EMLOG_ROOT)) {exit(error!);}function plugin_setting_view(){$live2d_setunserialize(ltrim(file_get_contents(dirname(__FILE__)./live2d.com.php),<?php die; ?>));?>KEY&#xff1a;音樂1&#xff1a;音樂2&#xff1a;音樂3&#xff1a;音樂4&a…

mysql 遠程load data,PyMySQL將(文件)數據加載到遠程MySQL實例時發生錯誤/異常

我正在使用PyMySQL-0.5.0并在將數據從文件加載到遠程MySQL實例時遇到了一個模糊的錯誤/異常。在執行“loaddatalocalinfile…”語句時&#xff0c;我看到一個異常&#xff0c;它說&#xff1a;The used command is not allowed with this MySQL version。在如果PyMySQL支持此操…

matlab頻率阻抗,有分析阻抗的matlab腳本嗎?

以上來自于谷歌翻譯以下為原文Interesting...- You cross-posted to two forums. I have deleted the other post.- You dont indicate what scope you are using or what you have tried.Most Keysight (and Agilent) scopes have an FFT or Spectrum function available. Hav…

php中修改彈窗的樣式,CSS變形彈窗效果示例

大家都知道&#xff0c;彈出窗體已經是現在網頁常用的一種交互設計&#xff0c;在這個注重交互動畫體驗的時代&#xff0c;網頁彈窗也是可以來點新鮮點子的&#xff0c;比如今天分享的CSS 變形Modal Window。當用戶點擊按鈕時&#xff0c;按鈕將會變成一個全屏的屏幕&#xff0…

php 開發高德地圖地理圍欄,高德地圖-地理圍欄功能實現

最近需要實現一個地理圍欄相關的功能。項目是和騎行相關的&#xff0c;主要是當游客或者騎友定位地址進入到對應的景點的地理圍欄里面&#xff0c;則播報景點相關的報道語音。接到需求之后&#xff0c;我開始查看高德的相關API&#xff0c;由于圍欄是多邊形的&#xff0c;則需要…