支付主要分為幾個步驟:
前端攜帶支付需要的資料(商品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呼叫再次簽...
微信小程式支付和退款流程下
微信小程式支付及退款流程詳解 上 中講了微信支付的相關流程。在理清思路後,流程還是比較清晰和簡單的。重點在於需要注意一些細節問題,例如資料格式,加密方法等。下面說一下微信小程式退款的具體實現 小程式退款的流程和付款相似,但有一些細節上的不同。首先退款的步驟通常如下 使用者前端點選退款按鈕後,後端接收...