tp6 v3微信退款

   /*** @Notes:退款* @param $out_trade_no 支付時候訂單號(order表 original_bn)兩個參數選一個這個要選對* @param $out_refund_no 退款訂單號* @param $total 訂單金額* @param $refund 退款金額* @Time: 2023-08-10*/public function refundMoney($out_trade_no , $out_refund_no , $total , $refund){$config = config('wechat.wechat');$time=time();$refundData=['out_refund_no'=>$out_refund_no,	//退款訂單號自己生成就好'reason'=>'商品退款','notify_url'=>$config['pay']['refundNotifyUrl'],//退款回調地址'out_trade_no' => $out_trade_no,'amount'=>['refund'=> $refund, //退款標價金額,單位為分,可以做部分退款'total'=> $total, //訂單總金額,單位為分'currency'=>'CNY']];$url='https://api.mch.weixin.qq.com/v3/refund/domestic/refunds';$urlarr = parse_url($url); //拆解為:[scheme=>https,host=>api.mch.weixin.qq.com,path=>/v3/pay/transactions/native]$mchid =$config['pay']['merchantId'];//商戶ID$xlid = $config['pay']['serialNumber'];//證書序列號$refundData=json_encode($refundData);$nonce = $this->randomString();$key = $this->getSign($refundData,$urlarr['path'],$nonce,$time);$token = sprintf('mchid="%s",serial_no="%s",nonce_str="%s",timestamp="%d",signature="%s"',$mchid,$xlid,$nonce,$time,$key);$header  = array('Accept: application/json','Content-Type: application/json','User-Agent:*/*','Authorization: WECHATPAY2-SHA256-RSA2048 '.$token);$res=$this->curl_post_https($url,$refundData,$header);$res_array=json_decode($res,true);return $res_array;}
   // 生成隨機字符串private function randomString($len = 32){$string = '';$char = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678';for ($i = 0; $i < $len; $i++) {$string .= $char[mt_rand(0, strlen($char) - 1)];}return $string;}//微信支付簽名function getSign($data=array(),$url,$randstr,$time){$str = "POST"."\n".$url."\n".$time."\n".$randstr."\n".$data."\n";$key = file_get_contents(getcwd() .'/cert/apiclient_key.pem');//在商戶平臺下載的秘鑰,讀取到變量 最好是放到public下邊 $str = $this->getSha256WithRSA($str,$key);return $str;}//加密public function getSha256WithRSA($content, $privateKey){$binary_signature = "";$algo = "SHA256";openssl_sign($content, $binary_signature, $privateKey, $algo);$sign = base64_encode($binary_signature);return $sign;}//退款用function curl_post_https($url,$data,$header){ // 模擬提交數據函數$curl = curl_init(); // 啟動一個CURL會話curl_setopt($curl, CURLOPT_URL, $url); // 要訪問的地址curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 對認證證書來源的檢查curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); // 從證書中檢查SSL加密算法是否存在,如果出錯則修改為0,默認為1curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模擬用戶使用的瀏覽器curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自動跳轉curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自動設置Referercurl_setopt($curl, CURLOPT_POST, 1); // 發送一個常規的Post請求curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // Post提交的數據包curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 設置超時限制防止死循環curl_setopt($curl, CURLOPT_HEADER, 0); // 顯示返回的Header區域內容curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 獲取的信息以文件流的形式返回curl_setopt($curl, CURLOPT_HTTPHEADER, $header);$tmpInfo = curl_exec($curl); // 執行操作if (curl_errno($curl)) {echo 'Errno'.curl_error($curl);//捕抓異常}curl_close($curl); // 關閉CURL會話return $tmpInfo; // 返回數據,json格式}

調用

    $res = WxPay::instance()->refundMoney($order['original_bn'] , $order['order_bn'] , $sum , $order['total_money']);$msg = '';if (!empty($res['code'])) {$msg = $res['message'];}if (!empty($res['status'])) {if ($res['status'] == 'SUCCESS'){$msg = '退款成功';} else if ($res['status'] == 'CLOSED') {$msg = '退款關閉';} else if ($res['status'] == 'PROCESSING') {$msg = '退款處理中';} else if ($res['status'] == 'ABNORMAL') {$msg = '退款異常';}}return $msg;

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

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

相關文章

oracle的異常處理

oracle提供了預定義例外、非預定義例外和自定義例外三種類型。其中&#xff1a; l預定義例外用于處理常見的oracle錯誤&#xff1b; l非預定義例外用于處理預定義所不能處理的oracle錯誤&#xff1b; l自定義例外處理與oracle錯誤無關的其他情況。 Oracle代碼編寫過程中&am…

nginx反向代理與負載均衡

負載均衡依靠反向代理實現。nginx的代理分為七層代理與四層代理&#xff1a; 七層代理&#xff1a;七層代理的就是http請求和響應。七層代理是最常用的反向代理方式&#xff0c;只能配置在nginx配置文件的http模塊。而且配置方法名稱&#xff1a;upstream模塊&#xff0c;不能寫…

提升效率!Go語言開發者不可錯過的必備工具集合!

&#x1f337;&#x1f341; 博主貓頭虎 帶您 Go to Golang Language.??&#x1f341; &#x1f984; 博客首頁——貓頭虎的博客&#x1f390; &#x1f433;《面試題大全專欄》 文章圖文并茂&#x1f995;生動形象&#x1f996;簡單易學&#xff01;歡迎大家來踩踩~&#x1…

UDP數據報網絡編程(實現簡單的回顯服務器,客戶端)

回顯服務器表示客戶端發的是啥&#xff0c;服務器就返回啥&#xff0c;主要是為了熟悉UDP數據報網絡編程的基本步驟 對于程序的所有分析都寫到了代碼上 UDP回顯服務器代碼 package UdpEcho;import java.io.IOException; import java.net.DatagramPacket; import java.net.Dat…

ClickHouse查看執行計劃(EXPLAIN語法)

1.EXPLAIN 語法示例 EXPLAIN [AST | SYNTAX | QUERY TREE | PLAN | PIPELINE | ESTIMATE | TABLE OVERRIDE] [setting value, ...] [ SELECT ... | tableFunction(...) [COLUMNS (...)] [ORDER BY ...] [PARTITION BY ...] [PRIMARY KEY] [SAMPLE BY ...] [T…

途樂證券-最準確的KDJ改良指標?

KDJ目標是技術剖析的一種重要目標之一&#xff0c;它是利用隨機目標&#xff08;%R&#xff09;發展而來的&#xff0c;是一種反映商場超買和超賣狀況的買賣目標。KDJ目標由快線&#xff08;K線&#xff09;、慢線&#xff08;D線&#xff09;和隨機值&#xff08;J線&#xff…

RestTemplate HTTPS請求忽略SSL證書

問題描述 使用RestTemplate發送HTTPS請求的時候&#xff0c;出現了這樣的一個問題&#xff1a; sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification …

MySQL多表查詢

1.創建student和score表 創建score表 2.為student表和score表增加記錄 向student表插入記錄的INSERT語句如下&#xff1a; 向score表插入記錄的INSERT語句如下&#xff1a; 1.查詢student表的所有記錄 2.查詢student表的第2條到4條記錄 3.從student表查詢所有學生的學號&#…

2023最新影視泛目錄系統,蘋果cms最新下載地址

影視泛目錄系統是指一種集成了電影、電視劇、綜藝節目、動漫等多種影視資源資源的系統&#xff0c;其目的是為用戶提供一個方便快捷的影視資源檢索、瀏覽、分享、評論的平臺。該系統通過對影視資源進行分類、標簽化、評分等方式&#xff0c;為用戶提供更加精準的檢索和推薦服務…

C#多線程學習 生產者和消費者

前面說過&#xff0c;每個線程都有自己的資源&#xff0c;但是代碼區是共享的&#xff0c;即每個線程都可以執行相同的函數。這可能帶來的問題就是幾個線程同時執行一個函數&#xff0c;導致數據的混亂&#xff0c;產生不可預料的結果&#xff0c;因此我們必須避免這種情況的發…

mousedown拖拽功能(vue3+ts)

因為項目有rem適配&#xff0c;使用第三方插件無法處理適配問題&#xff0c;所有只能自己寫拖拽功能了 拖拽一般都會想到按下&#xff0c;移動&#xff0c;放開&#xff0c;但是本人親測&#xff0c;就在div綁定一個按下事件就行了&#xff08;在事件里面寫另外兩個事件&#x…

爬蟲ip池越大越好嗎?

作為一名資深的程序員&#xff0c;今天我要給大家分享一些關于爬蟲ip池的知識。關于ip代理池的問題&#xff0c;答案是肯定的&#xff0c;池子越大越好。下面跟我一起來盤點一下ip池大的好處吧&#xff01; 1、提高穩定性 爬蟲ip池越大&#xff0c;意味著擁有更多可用的爬蟲ip…

「C/C++」C/C++搭建程序框架

?博客主頁何曾參靜謐的博客&#x1f4cc;文章專欄「C/C」C/C程序設計&#x1f4da;全部專欄「UG/NX」NX二次開發「UG/NX」BlockUI集合「VS」Visual Studio「QT」QT5程序設計「C/C」C/C程序設計「Win」Windows程序設計「DSA」數據結構與算法「File」數據文件格式 目錄 1. 分離職…

Flume原理剖析

一、介紹 Flume是一個高可用、高可靠&#xff0c;分布式的海量日志采集、聚合和傳輸的系統。Flume支持在日志系統中定制各類數據發送方&#xff0c;用于收集數據&#xff1b;同時&#xff0c;Flume提供對數據進行簡單處理&#xff0c;并寫到各種數據接受方&#xff08;可定制&…

使用阿里云服務器搭建Discuz論壇網站教程基于CentOS系統

阿里云百科分享使用阿里云服務器建站教程&#xff0c;本文是搭建Discuz論壇&#xff0c;Discuz!是一款通用的社區論壇軟件系統&#xff0c;它采用PHP和MySQL組合的基礎架構&#xff0c;為您提供高效的論壇解決方案。本文介紹如何在CentOS 7操作系統的ECS實例上搭建Discuz! X3.4…

Nginx 安裝與部署

文章和代碼已經歸檔至【Github倉庫&#xff1a;https://github.com/timerring/front-end-tutorial 】或者公眾號【AIShareLab】回復 nginx 也可獲取。 文章目錄 虛擬機安裝CentOS7.4Linux配置配置上網配置靜態ip Nginx的安裝版本區別備份克隆 安裝編譯安裝報錯解決 啟動Nginx防…

topo 成績排名

題目描述 每到考試后&#xff0c;學校都會發成績表給每個學生&#xff0c;但是很多同學更關心的是自己在班級里的排名&#xff0c;可惜排名信息并沒有公開。 小雯同學很想知道這次期末考試的全班排名情況&#xff0c;但是她的同學卻不愿意告訴她自己的分數&#xff0c;只告訴她…

分布式 - 消息隊列Kafka:Kafka生產者發送消息的方式

文章目錄 1. Kafka 生產者2. kafaka 命令行操作3. kafka 生產者發送消息流程4. Kafka 生產者的創建5. Kafka 生產者發送消息1. 發送即忘記2. 同步發送3. 異步發送 6. Kafka 消息對象 ProducerRecord 1. Kafka 生產者 不管是把Kafka作為消息隊列、消息總線還是數據存儲平臺&…

wpf控件上移下移,調整子集控件顯示順序

頁面代碼: <!-- 導出A2,自定義導出設置列,添加時間:2023-8-9 14:14:18,作者:whl; --><Window x:Class="WpfSnqkGasAnalysis.WindowGasExportA2"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http:/…

git遠程倉庫的創建及使用

1.倉庫的概念&#xff1a; 1.1 本地倉庫&#xff1a; 了解遠程倉庫前我們先了解一下本地倉庫&#xff0c;本地倉庫開發人員在完成部分代碼的編寫之后&#xff0c;可以將這一部分的代碼做一個提交。這個提交完全就是一個新的版本提交&#xff0c;當然這個提交動作是在開發者的電…