php 微信退款,非同步通知實現

2021-09-12 02:22:53 字數 2835 閱讀 3258

需要注意的事項:

4 伺服器也要授權這個證書路徑的許可權,不然沒有許可權會導致失敗

wxrefund.php

class wxrefund

public function refundstart()

private function wxrefundapi()

//需要使用證書的請求

function postxmlsslcurl($xml, $url, $second = 30)

else

}//作用:產生隨機字串,不長於32位

private function createnoncestr($length = 32)

return $str;

}//作用:生成簽名

private function getsign($obj)

//簽名步驟一:按字典序排序引數

ksort($parameters);

$string = $this->formatbizqueryparamap($parameters, false);

//簽名步驟二:在string後加入key

$string = $string . "&key=" . $this->key;

//簽名步驟三:md5加密

$string = md5($string);

//簽名步驟四:所有字元轉為大寫

$result_ = strtoupper($string);

return $result_;

}//陣列轉換成xml

private function arraytoxml($arr)

else

}$xml .= "";

return $xml;

}//xml轉換成陣列

private function xmltoarray($xml)

// 作用:格式化引數,簽名過程需要使用

private function formatbizqueryparamap($paramap, $urlencode)

$buff .= $k . "=" . $v . "&";

}$reqpar = '';

if (strlen($buff) > 0)

return $reqpar;

}}

$out_refund_no ='refund_'.uniqid() ;//退款單號,生成隨機的64位字串,不加特殊字元

$mch_id = 6987656545556;

$key = uere758589656765665;

$money_amount=100;//訂單總金額,單位元

$refundfee = 50;//退款的金額 單位元,退款金額必須小於等於訂單總金額

$out_trade_no ='refund_'.uniqid(); //商戶系統內部訂單號,要求32個字元內,只能是數字、大小寫字母_-|*@ ,且在同乙個商戶號下唯一。

$notify_url = '';

$result = $start->refundstart();

/*return_code 此字段是通訊標識,表示介面層的請求結果,並非退款狀態

*result_code success退款申請接收成功,結果通過退款查詢介面查詢 fail 提交業務失敗

*/if (($result['return_code'] == 'success') && ($result['result_code'] == 'success'))

else

另一篇參考文章:

1.非同步通知接收類封裝

wxrefundnotify.php

class wxrefundnotify

else

}public function decryptdata()

public function xmltoarray($xml)

}

非同步通知類的坑:
function refund_decrypt($str, $key) 

$key=md5('商戶key');

$data=refund_decrypt($str, $key);

echo $data;

2.非同步通知類的使用

$post = input('post.');

if ($post == null)

if ($post == null)

if (empty($post) || $post == null || $post == '')

$wx_config = getconfig();

/*$key 商戶秘鑰key*/

$key = $wx_config['key'];

$weixin_data = new wxrefundnotify($post, $key);

$result=$weixin_data->decryptdata();

//return_code此字段是通訊標識,非交易標識,交易是否成功需要檢視refund_status來判斷

if($result['return_code']=='success'&&$result['refund_status']=='success')else if($result['refund_status']=='change')else if($result['refund_status']=='refundclose')

php 實現微信退款

要是在測試的時候,網頁提示 curl 58 說明 證書的路徑出現問題 這裡要填物理路徑,也就是絕對路徑 網頁提示curl 52 說明你的證書引入少了,在官方的demo上只有兩個證書 apiclient cert.pem和 apiclient key.pem 你還需要引入乙個證書 rootca.pem...

PHP實現微信申請退款

申請退款,wxpayrefund中out trade no transaction id至少填乙個且 out refund no total fee refund fee op user id為必填引數 param wxpayrefund inputobj param int timeout thr...

PHP實現微信退款功能

要是在測試的時候,網頁提示 curl 58 說明 證書的路徑出現問題 這裡程式設計客棧要填物理路徑,也就是絕對路徑 網頁提示curl 52 說明你的證書引入少了,在官方的demo上只有兩個證書 apiclient cert.pem和 apiclient key.pem 你還需要引入乙個證書 root...