微信小程式支付及退款流程詳解

2022-03-10 21:38:58 字數 3243 閱讀 8531

支付主要分為幾個步驟:

前端攜帶支付需要的資料(商品id,購買數量等)發起支付請求

前端進行支付動作

下面就詳細的說明一下各個步驟的具體實現

1. 前端請求支付

後端接收到前端傳送的支付請求後,可以進行一下相關驗證,例如判斷一下使用者有沒有問題,支付金額對不對等等。
使用者標識 openid。也就是使用者的小程式標識,在我上篇部落格中說明了如何獲取。

商戶訂單號 out_trade_no 。商戶為這次支付生成的訂單號

總金額 total_fee 。訂單總金額,很重要的一點是單位是分,要特別注意。

終端ip位址 spbill_create_ip 。終端位址ip,也就是請求支付的 ip 位址。

簽名 sign 。使用上面的所有引數進行相應處理加密生成簽名。(具體處理方式可見下文**,可直接復用。)

。timestamp 當前時間戳

noncestr 隨機字串

package 就是上面提到的 prepay_id,不過切記格式如 「prepay_id= prepay_id_item「。否則會導致錯誤。

signtype 加密方式,一般應該是 md5

paysign 對以上資料進行相應處理並加密。

到這裡,後端的支付介面已經完成了接收前端支付請求,並返回了前端支付所需資料的功能。

4. 前端發起支付

​ 前端在接收到返回資料後,使用 wx.requestpayment() 來請求發起支付。此 api 需要的物件引數各項值就是我們上一步返回的各個資料。

class weixinpay

public function pay()

$unifiedorder=$this->unifiedorder();

$parameters=array(

'timestamp'=>''.time().'',//時間戳

'noncestr'=>$this->createnoncestr(),//隨機串

'package'=>'prepay_id='.$unifiedorder['prepay_id'],//資料報

'signtype'=>'md5'//簽名方式

);$parameters['paysign']=$this->getsign($parameters);

return $parameters;}/*

*/private function unifiedorder()

//陣列轉字串方法

protected function arraytoxml($arr)else

}$xml.="";

return $xml;

}protected function xmltoarray($xml)

//傳送xml請求方法

private static function postxmlcurl($xml, $url, $second = 30)

else }/*

*/protected 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_;}/*

*排序並格式化引數方法,簽名時需要使用

*/protected function formatbizqueryparamap($paramap, $urlencode)

//$buff .= strtolower($k) . "=" . $v . "&";

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

}$reqpar;

if (strlen($buff) > 0)

return $reqpar;}/*

* 生成隨機字串方法

*/protected function createnoncestr($length = 32 )

return $str;

}}小程式退款的流程和付款相似,但有一些細節上的不同。

首先退款的步驟通常如下:

下面講解一下退款的具體步驟

一. 使用者發起退款請求

使用者在前端發起退款請求,後端接收到退款請求,將相應訂單標記為申請退款,展示在後台.商戶檢視後,如果同意退款再進行相應操作.此後才進入真正的退款流程.
二. 商戶發起退款請求

退款請求需要的引數如下(多個引數在支付api請求時也有使用):

商戶訂單號 out_trade_no 。退款訂單在支付時生成的訂單號

退款訂單號 out_refund_no 。由後端生成的退款單號,需要保證唯一,因為多個同樣的退款單號只會退款一次。

總金額 total_fee 。訂單總金額,單位為分。

退款金額 refund_fee 需要退款的金額,單位同樣為分

操作員 op_user_id .與商戶號相同即可

隨機字串 nonce_str 。同支付請求

簽名 sign 。使用上面的所有引數進行相應處理加密生成簽名。(具體處理方式與支付相同,可直接復用。)

三. 退款完成

退款因為流程與支付大同小異,因此退款的php類我選擇了直接繼承支付類,

**如下,注意區分退款請求方法postxmlsslcurl和支付請求方法postxmlcurl的區別,這也就是上文提到的退款需要的雙向證書的使用。

class winxinrefund extends weixinpay 

public function refund()

private function wxrefundapi()

//需要使用證書的請求

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

else

}}## 三. 總結

>我再也不會把自己,愚蠢的交給過去。我的生活和我的想法,從此相隔萬里。

微信小程式支付及退款流程詳解

一.支付 支付主要分為幾個步驟 前端攜帶支付需要的資料 商品id,購買數量等 發起支付請求 前端進行支付動作 1.前端請求支付 後端接收到前端傳送的支付請求後,可以進行一下相關驗證,例如判斷一下使用者有沒有問題,支付金額對不對等等。使用者標識 openid。也就是使用者的小程式標識,在我上篇部落格中...

微信小程式支付及退款整體流程

wx.requestpayment fail res 文件也寫的很清楚,不細說,主要看下面這個流程 1 小程式內呼叫登入介面,獲取到使用者的openid,api參見公共api 小程式登入api 2 商戶server呼叫支付統一下單,api參見公共api 統一下單api 3 商戶server呼叫再次簽...

微信小程式支付和退款流程下

微信小程式支付及退款流程詳解 上 中講了微信支付的相關流程。在理清思路後,流程還是比較清晰和簡單的。重點在於需要注意一些細節問題,例如資料格式,加密方法等。下面說一下微信小程式退款的具體實現 小程式退款的流程和付款相似,但有一些細節上的不同。首先退款的步驟通常如下 使用者前端點選退款按鈕後,後端接收...