天天看點

Asp.Net Core微信H5支付(掃碼支付,公衆号支付,H5支付,App支付)之2

 上一篇說到微信掃碼支付,今天來分享下微信H5支付,适用場景為手機端非微信浏覽器調用微信H5支付驚醒網站支付業務處理。申請開通微信H5支付工作不多做介紹,直接上代碼。

  首先是微信支付業務類(WxPayService)中的方法,傳上必要的參數,該方法将會構造請求XML字元串到微信api接口,H5支付用到的是傳回XML參數的mweb_url的值,控制器中的Aciton方法調用該業務層方法得到mweb_url的值,此時,前端ajax調用控制器傳回mweb_url值,直接将window.localtion.href=mweb_url若手機有安裝微信即可喚起微信進行支付。H5支付注意當支付喚起時候前端應做個定時請求背景訂單狀态是否支付并做相應的跳轉處理。

  

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

/// <summary>

/// 擷取H5方式的手機微信支付位址,異常傳回""

/// </summary>

/// <param name="out_trade_no">訂單号</param>

/// <param name="body">描述</param>

/// <param name="total_fee">總價</param>

/// <param name="ip">客戶IP</param>

/// <returns></returns>

public

string

GetWxH5PayUrl(

string

out_trade_no,

string

body,

string

total_fee,

string

ip)

{

Senparc.Weixin.MP.TenPayLibV3.RequestHandler packageReqHandler =

new

Senparc.Weixin.MP.TenPayLibV3.RequestHandler();

#region 構造請求參數

packageReqHandler.SetParameter(

"appid"

, wxPayConfig.appid);

//APPID

packageReqHandler.SetParameter(

"mch_id"

, wxPayConfig.mchid);

//商戶号

packageReqHandler.SetParameter(

"nonce_str"

, Senparc.Weixin.MP.TenPayLibV3.TenPayV3Util.GetNoncestr());

packageReqHandler.SetParameter(

"body"

, body);

packageReqHandler.SetParameter(

"out_trade_no"

, out_trade_no);

//訂單号

packageReqHandler.SetParameter(

"total_fee"

, (

int

)(Convert.ToDecimal(total_fee) * 100) +

""

);

//金額,以分為機關

packageReqHandler.SetParameter(

"spbill_create_ip"

, ip);

//IP

packageReqHandler.SetParameter(

"notify_url"

, wxPayConfig.notify_url);

//回調位址

packageReqHandler.SetParameter(

"trade_type"

,

"MWEB"

);

//這個不可以改。固定為Mweb

packageReqHandler.SetParameter(

"sign"

, packageReqHandler.CreateMd5Sign(

"key"

, wxPayConfig.key));

//商戶API密鑰

#endregion

//将參數轉為xml字元串

string

data = packageReqHandler.ParseXML();

//發起post異步請求,擷取傳回的内容

var

result = PostWithStringFile(wxPayConfig.api_url, data);

Log.Info(

"【GetWxH5PayUrl】訂單:"

+ out_trade_no +

",請求得到的xml:"

+ result,

"微信支付"

);

var

res = System.Xml.Linq.XDocument.Parse(result);

try

{

string

mweb_url = res.Element(

"xml"

).Element(

"mweb_url"

).Value;

Log.Info(

"【GetWxH5PayUrl】訂單:"

+ out_trade_no +

",請求得到的url:"

+ mweb_url,

"微信支付"

);

return

mweb_url;

}

catch

(Exception ex)

{

Log.Info(

"【GetWxH5PayUrl】訂單:"

+ out_trade_no +

",異常:"

+ ex.ToString(),

"微信支付"

);

return

""

;

}

}

  這裡有用到上一篇介紹的Senparc.Weixin.MP和我封裝的方法PostWithStringFile(),這裡就不重複貼出,最後完成時候我将貼上本人使用的微信支付業務類和前端調用例子

附上寫日志的一個老師傅寫類庫Sky.Logger,在項目中添加引用即可使用日志:連結: https://pan.baidu.com/s/1eHdNGZN0pmNHsO_yHzgE_g 密碼: ta2x

繼續閱讀