首頁 後端開發 php教程 PHP怎麼實現微信申請退款

PHP怎麼實現微信申請退款

Dec 07, 2019 pm 05:27 PM
微信

前面講了怎麼實現微信支付,詳見相關文章:PHP實作微信支付(jsapi支付)流程  和ThinkPHP中實作微信支付(jsapi支付)流程。由於業務需求,還需要有微信退款,經過研究和摸索,也終於搞定了。

前期準備:

當然是搞定了微信支付,不然怎麼退款,這次還是使用官方的demo。當然網路上可能也有很多大神自己重寫和封裝了demo,或許更加好用簡潔,但是我還是不提倡用,原因如下:

(1)可能功能不全,或許他只是實現了微信支付,但是還有申請退款、查詢退款、訂單查詢、撤銷訂單等業務功能可能是你後續需要的,如果你依賴於大神的SDK的便捷,如果有新的業務需求,你就懵逼了;

(2)安全考慮,涉及到支付涉及金錢,必須非常安全。官方SDK雖然我也吐槽,但至少會相對比較安全,再次重寫,雖然暫時沒看出問題,但是萬一有漏洞就不好了。

本篇還是使用到官方提供的SDK中的最重要的一個類別文件WxPay.Api.php中提供的refund()方法來實現,此方法在WxPay.Api.php檔案的第141行,程式碼如下:

/**
 * 
 * 申请退款,WxPayRefund中out_trade_no、transaction_id至少填一个且
 * out_refund_no、total_fee、refund_fee、op_user_id为必填参数
 * appid、mchid、spbill_create_ip、nonce_str不需要填入
 * @param WxPayRefund $inputObj
 * @param int $timeOut
 * @throws WxPayException
 * @return 成功时返回,其他抛异常
 */
public static function refund($inputObj, $timeOut = 6){
$url = "https://api.mch.weixin.qq.com/secapi/pay/refund";
//检测必填参数
if(!$inputObj->IsOut_trade_noSet() && !$inputObj->IsTransaction_idSet()) {
throw new WxPayException("退款申请接口中,out_trade_no、transaction_id至少填一个!");
}else if(!$inputObj->IsOut_refund_noSet()){
throw new WxPayException("退款申请接口中,缺少必填参数out_refund_no!");
}else if(!$inputObj->IsTotal_feeSet()){
throw new WxPayException("退款申请接口中,缺少必填参数total_fee!");
}else if(!$inputObj->IsRefund_feeSet()){
throw new WxPayException("退款申请接口中,缺少必填参数refund_fee!");
}else if(!$inputObj->IsOp_user_idSet()){
throw new WxPayException("退款申请接口中,缺少必填参数op_user_id!");
}
$inputObj->SetAppid(WxPayConfig::APPID);//公众账号ID
$inputObj->SetMch_id(WxPayConfig::MCHID);//商户号
$inputObj->SetNonce_str(self::getNonceStr());//随机字符串
$inputObj->SetSign();//签名
$xml = $inputObj->ToXml();
$startTimeStamp = self::getMillisecond();//请求开始时间
$response = self::postXmlCurl($xml, $url, true, $timeOut);
$result = WxPayResults::Init($response);
self::reportCostTime($url, $startTimeStamp, $result);//上报请求花费时间
return $result;
}
登入後複製

官方的方法,寫的很清楚需要哪些參數,還有一些必須參數SDK已經幫我們補齊了,我將這個方法重新封裝一下,便於在專案中調用:

/**
 * 微信退款
 * @param  string   $order_id 订单ID
 * @return 成功时返回(array类型),其他抛异常
 */
function wxRefund($order_id){
//我的SDK放在项目根目录下的Api目录下
require_once APP_ROOT."/Api/wxpay/lib/WxPay.Api.php";
//查询订单,根据订单里边的数据进行退款
$order = M('order')->where(array('id'=>$order_id,'is_refund'=>2,'order_status'=>1))->find();
$merchid = WxPayConfig::MCHID;
if(!$order) return false;
$input = new WxPayRefund();
$input->SetOut_trade_no($order['order_sn']);//自己的订单号
$input->SetTransaction_id($order['transaction_id']);  //微信官方生成的订单流水号,在支付成功中有返回
$input->SetOut_refund_no(getrand_num(true));//退款单号
$input->SetTotal_fee($order['total_price']);//订单标价金额,单位为分
$input->SetRefund_fee($order['total_price']);//退款总金额,订单总金额,单位为分,只能为整数
$input->SetOp_user_id($merchid);
$result = WxPayApi::refund($input);//退款操作
// 这句file_put_contents是用来查看服务器返回的退款结果 测试完可以删除了
//file_put_contents(APP_ROOT.'/Api/wxpay/logs/log3.txt',arrayToXml($result),FILE_APPEND);
return $result;
}
登入後複製

這裡需要吐槽一下,竟然不說返回值的類型,在支付的時候返回的是XML數據,這裡竟然返回的是數組,讓我措手不及,哈哈不過還是返回數組比較好,可以直接判斷處理。

方法呼叫就更加簡單了:

//微信退款
$result = wxRefund($order_id);
// 这句file_put_contents是用来查看服务器返回的退款结果 测试完可以删除了
//file_put_contents(APP_ROOT.'/Api/wxpay/logs/log4.txt',arrayToXml($result),FILE_APPEND);
if(($result['return_code']=='SUCCESS') && ($result['result_code']=='SUCCESS')){
//退款成功
}else if(($result['return_code']=='FAIL') || ($result['result_code']=='FAIL')){
//退款失败
//原因
$reason = (empty($result['err_code_des'])?$result['return_msg']:$result['err_code_des']);
}else{
//失败
}
登入後複製

退款成功返回如下:

PHP怎麼實現微信申請退款

#親測無誤:這是整合了官方的SDK實現的,如果不使用SDK,可以使用更簡單的方法,見:PHP實現微信支付(jsapi支付)和退款(無需集成支付SDK)

PHP怎麼實現微信申請退款

更多PHP相關知識,請造訪PHP教學

以上是PHP怎麼實現微信申請退款的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

傳言說'iPhone 16 可能不支援微信”,蘋果中國區技術顧問稱正與騰訊溝通應用商店抽成事宜 傳言說'iPhone 16 可能不支援微信”,蘋果中國區技術顧問稱正與騰訊溝通應用商店抽成事宜 Sep 02, 2024 pm 10:45 PM

感謝網友情切琛思、HH_KK、石原里美幸福、華南吳彥祖的線索投遞! 9月2日消息,近期有傳言稱“iPhone16可能不支持微信”,對此貝殼財經記者致電蘋果官方熱線,蘋果中國區技術顧問回應稱,關於iOS系統或蘋果設備能否繼續使用微信,以及微信能否繼續在蘋果應用商店上架下載的問題,需要蘋果公司與騰訊之間進行溝通和探討,才能確定之後的情況。軟體應用商店及微信問題說明軟體應用商店技術顧問指出,軟體在蘋果商店上架可能需要開發者支付費用。達到一定下載量後,後續下載需向蘋果支付相應費用。蘋果正與騰訊積極溝通,

deepseek生成圖片教程 deepseek生成圖片教程 Feb 19, 2025 pm 04:15 PM

DeepSeek:強大的AI圖像生成利器! DeepSeek本身並非圖像生成工具,但其強大的核心技術為眾多AI繪畫工具提供了底層支持。想知道如何利用DeepSeek間接生成圖片嗎?請繼續閱讀!利用基於DeepSeek的AI工俱生成圖像:以下步驟將引導您使用這些工具:啟動AI繪畫工具:在您的電腦、手機瀏覽器或微信小程序中搜索並打開一個基於DeepSeek的AI繪畫工具(例如,搜索“簡單AI”)。選擇繪畫模式:選擇“AI繪圖”或類似功能,並根據您的需求選擇圖片類型,例如“動漫頭像”、“風景

知情人士回應「微信可能不支援蘋果 iPhone 16」:傳言為謠言 知情人士回應「微信可能不支援蘋果 iPhone 16」:傳言為謠言 Sep 02, 2024 pm 10:43 PM

微信支持iPhone16謠言被闢謠感謝網友西窗舊事、HH_KK的線索投遞! 9月2日消息,今日有傳言稱,微信可能不支援iPhone16,iPhone一旦升級到iOS18.2系統將無法使用微信。據《每日經濟新聞》從知情人士處獲悉,此傳言為謠言。蘋果回應另據貝殼財經報道,蘋果中國區技術顧問回應稱,關於iOS系統或蘋果設備能否繼續使用微信,以及微信能否繼續在蘋果應用商店上架和下載的問題,需要蘋果公司與騰訊之間進行溝通和探討,才能確定之後的情況。目前,蘋果正與騰訊積極溝通,以確認騰訊是否會繼續向蘋果應用商

gateio中文官方網站 gate.io交易平台網址 gateio中文官方網站 gate.io交易平台網址 Feb 21, 2025 pm 03:06 PM

Gate.io,一家創立於 2013 年的領先加密貨幣交易平台,為中國用戶提供了完整的中文官方網站。該網站提供廣泛的服務,包括現貨交易、期貨交易和借貸,並提供中文界面、豐富的資源和社區支持等特色功能。

okx交易平台手續費一覽 okx交易平台手續費一覽 Feb 15, 2025 pm 03:09 PM

OKX 交易平台提供了各種類型的費率,包括交易費用、提款費用和融資費用。對於現貨交易,交易費用根據交易量和 VIP 等級而有所不同,採取“做市商模式”,即市場每筆交易收取較低的手續費。此外,OKX 還提供了多種類型的期貨合約,包括幣本位合約、USDT 合約和交割合約,每種合約的費用結構也有所不同。

gateio交易所app老版本 gateio交易所app老版本下載渠道 gateio交易所app老版本 gateio交易所app老版本下載渠道 Mar 04, 2025 pm 11:36 PM

Gateio 交易所 app 老版本下載渠道,涵蓋官方、第三方應用市場、論壇社區等途徑,還給出下載注意事項,幫你輕鬆獲取老版本,解決新版本使用不適或設備兼容問題。

歐易交易所app國內下載教程 歐易交易所app國內下載教程 Mar 21, 2025 pm 05:42 PM

本文提供國內安全下載歐易OKX App的詳細指南。由於國內應用商店限制,建議用戶通過歐易OKX官方網站下載App,或使用官網提供的二維碼掃描下載。下載過程中,務必核實官網地址,檢查應用權限,安裝後進行安全掃描,並啟用雙重驗證。 使用過程中,請遵守當地法律法規,使用安全網絡環境,保護賬戶安全,警惕詐騙,理性投資。 本文僅供參考,不構成投資建議,數字資產交易風險自負。

芝麻開門登錄註冊入口 gate.io交易所註冊官網入口 芝麻開門登錄註冊入口 gate.io交易所註冊官網入口 Mar 04, 2025 pm 04:51 PM

Gate.io(芝麻開門)是全球領先的加密貨幣交易平台,本文提供Gate.io現貨交易完整教程。教程涵蓋賬戶註冊登錄、KYC認證、法幣及數字貨幣充值、交易對選擇、限價/市價交易下單以及訂單和交易記錄查看等步驟,助您快速上手Gate.io平台進行加密貨幣交易。 無論是新手還是老手,都能從本教程中獲益,輕鬆掌握Gate.io交易技巧。

See all articles