【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】微信公眾號(hào)開(kāi)發(fā)之微信支付的示例分析_第1頁(yè)
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】微信公眾號(hào)開(kāi)發(fā)之微信支付的示例分析_第2頁(yè)
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】微信公眾號(hào)開(kāi)發(fā)之微信支付的示例分析_第3頁(yè)
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】微信公眾號(hào)開(kāi)發(fā)之微信支付的示例分析_第4頁(yè)
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】微信公眾號(hào)開(kāi)發(fā)之微信支付的示例分析_第5頁(yè)
已閱讀5頁(yè),還剩3頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】微信公眾號(hào)開(kāi)發(fā)之微信支付的示例分析

/upload/information/20201208/260/13916.jpg/upload/information/20201208/260/13917.jpgstring

timeStamp

=

TenPayUtil.GetTimestamp();

string

nonceStr

=

TenPayUtil.GetNoncestr();

string

paySign

=

string.Empty;

//創(chuàng)建支付應(yīng)答對(duì)象

var

packageReqHandler

=

new

RequestHandler(null);

string

spbill_create_ip

=

Request.UserHostAddress;

//初始化

//packageReqHandler.Init();

//packageReqHandler.SetKey(TenPayInfo.Key);

//設(shè)置package訂單參數(shù)

packageReqHandler.SetParameter("appid",

appID);

//公眾賬號(hào)ID

packageReqHandler.SetParameter("body",

StrUtil.GetCutString(productName,

100));

//不能超過(guò)127個(gè)字符

packageReqHandler.SetParameter("mch_id",

mchid);

//商戶(hù)號(hào)

packageReqHandler.SetParameter("nonce_str",

nonceStr.ToLower());

//隨機(jī)字符串

packageReqHandler.SetParameter("notify_url",

notifyUrl);

//接收財(cái)付通通知的URL

packageReqHandler.SetParameter("openid",

openId);

//openid

packageReqHandler.SetParameter("out_trade_no",

sp_billno);

//商家訂單號(hào)

//

packageReqHandler.SetParameter("attach",

"");

//附加數(shù)據(jù)

未來(lái)可用于區(qū)分不同微信支付業(yè)務(wù)

packageReqHandler.SetParameter("spbill_create_ip",

spbill_create_ip);

//用戶(hù)的公網(wǎng)ip,不是商戶(hù)服務(wù)器IP

packageReqHandler.SetParameter("total_fee",

(onlinePayMoney

*

100).ToString("0"));

//商品金額,以分為單位(money

*

100).ToString()

packageReqHandler.SetParameter("trade_type",

"JSAPI");

//交易類(lèi)型

//獲取package包

string

sign

=

packageReqHandler.CreateMd5Sign("key",

TenPayInfo.Key);

packageReqHandler.SetParameter("sign",

sign);

//交易類(lèi)型

string

data

=

packageReqHandler.ParseXML();

LoggerHelper.Log(data);

//調(diào)用統(tǒng)一下單接口請(qǐng)求訂單

var

result

=

TenPayV3Service.Unifiedorder(data);

LoggerHelper.Log(result);

var

res

=

XDocument.Parse(result);

string

prepayId

=

string.Empty;

if

(res.Element("xml").Element("return_code").Value

==

"SUCCESS")

{

prepayId

=

res.Element("xml").Element("prepay_id").Value;

}

string

package

=

string.Format("prepay_id={0}",

prepayId);

timeStamp

=

TenPayUtil.GetTimestamp();

//設(shè)置支付參數(shù)

var

paySignReqHandler

=

new

RequestHandler(null);

paySignReqHandler.SetParameter("appId",

appID);

paySignReqHandler.SetParameter("timeStamp",

timeStamp);

paySignReqHandler.SetParameter("nonceStr",

nonceStr);

paySignReqHandler.SetParameter("package",

package);

paySignReqHandler.SetParameter("signType",

"MD5");

paySign

=

paySignReqHandler.CreateMd5Sign("key",

TenPayInfo.Key);

//將信息傳遞給支付頁(yè)面

ViewBag.appId

=

appID;

ViewBag.timeStamp

=

timeStamp;

ViewBag.nonceStr

=

nonceStr;

ViewBag.package

=

package;

ViewBag.paySign

=

paySign;<script

type="text/javascript">

//

當(dāng)微信內(nèi)置瀏覽器完成內(nèi)部初始化后會(huì)觸發(fā)WeixinJSBridgeReady事件。

document.addEventListener('WeixinJSBridgeReady',

function

onBridgeReady()

{

$(function

()

{

//公眾號(hào)支付

jQuery('#getBrandWCPayRequest').click(function

(e)

{

WeixinJSBridge.invoke('getBrandWCPayRequest',

{

"appId":

"@ViewBag.appId",

//公眾號(hào)名稱(chēng)

"timeStamp":

"@ViewBag.timeStamp",

//時(shí)間戳

"nonceStr":

"@ViewBag.nonceStr",

//隨機(jī)串

"package":

"@Html.Raw(ViewBag.package.ToString())",//擴(kuò)展包

"signType":

"MD5",

//微信簽名方式

"paySign":

"@ViewBag.paySign"

//微信簽名

},

function

(res)

{

if

(res.err_msg

==

"get_brand_wcpay_request:ok")

{

//alert("微信支付成功!");

window.location.href

=

"@WxPaySettingConfig.WmallURL/Wmall/TradePay/Success/@ViewBag.ShopId/?orderNo=@orderNoMark";

}

else

if

(res.err_msg

==

"get_brand_wcpay_request:cancel")

{

//alert("用戶(hù)取消支付!");

}

else

{

window.location.href

=

"/wxpay/jsapi/error/?isPayFail=1&csid=@ViewBag.ShopId&orderNo=@orderNoMark&biztype=1";

}

//

使用以上方式判斷前端返回,微信團(tuán)隊(duì)鄭重提示:res.err_msg將在用戶(hù)支付成功后返回ok,但并不保證它絕對(duì)可靠。

//因此微信團(tuán)隊(duì)建議,當(dāng)收到ok返回時(shí),向商戶(hù)后臺(tái)詢(xún)問(wèn)是否收到交易成功的通知,若收到通知,前端展示交易成功的界面;若此時(shí)未收到通知,商戶(hù)后臺(tái)主動(dòng)調(diào)用查詢(xún)訂單接口,查詢(xún)訂單的當(dāng)前狀態(tài),并反饋給前端展示相應(yīng)的界面。

});

});

});

//WeixinJSBridge.log('yo~

ready.');

},

false);

</script>[HttpPost]

public

void

NoticeUrl()

{

string

xmlString

=

HttpClientHelper.GetPostString(Request);

5

//此處應(yīng)記錄日志

LoggerHelper.Log(string.Format("【微支付】異步通知參數(shù):{0}",

xmlString));

8

var

returnMsg

=

new

ReturnMessage()

{

Return_Code

=

"SUCCESS",

Return_Msg

=

string.Empty

};

//通知消息實(shí)體

NotifyMessage

message

=

null;

//訂單處理相關(guān)的方法內(nèi)全局變量

bool

isNeedDeal

=

false;

//標(biāo)識(shí)訂單是否需要處理

string

orderNo

=

string.Empty;

//訂單編號(hào)

(需要根據(jù)商家數(shù)據(jù)包字段判斷所屬訂單)

CorpSalesOrder

saleOrder

=

null;

try

{

message

=

HttpClientHelper.XmlDeserialize<NotifyMessage>(xmlString);

//訂單號(hào)

獲得

orderNo

=

message.Out_Trade_No;

if

(string.IsNullOrEmpty(orderNo))

{

throw

new

InvalidOperationException("未找到該訂單信息.");

}

45

var

doc

=

new

XmlDocument();

doc.LoadXml(xmlString);

var

dic

=

new

Dictionary<string,

string>();

string

sign

=

string.Empty;

foreach

(XmlNode

node

in

doc.FirstChild.ChildNodes)

{

if

(node.Name.ToLower()

!=

"sign")

dic.Add(node.Name,

node.InnerText);

else

sign

=

node.InnerText;

}

UnifiedWxPayModel

model

=

UnifiedWxPayModel.CreateUnifiedModel(xddAppId,

xddMchid,

xddWxkey);

if

(model.ValidateMD5Signature(dic,

sign))

{

//處理通知

業(yè)務(wù)邏輯:

if

(message.Return_Code

==

"SUCCESS")

{

if

(message.Result_Code

==

"SUCCESS")

{

//此處處理支付成功后的業(yè)務(wù)邏輯

}

else

{

throw

new

InvalidOperationException(string.Format("{0}:{1}",

message.Err_Code,

message.Err_Code_Des));

}

}

else

{

throw

new

InvalidOperatio

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論