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

2022-06-10 15:51:08 字數 3720 閱讀 8128

一. 支付

支付主要分為幾個步驟:

前端攜帶支付需要的資料(商品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()

//private

function

$unifiedorder=$this->unifiedorder();

$parameters=array

(小程式id

'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

; }

}

二.退款

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

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

值得注意的有以下兩點:

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

一. 使用者發起退款請求

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

二. 商戶發起退款請求

商戶訂單號 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呼叫再次簽...

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

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