




版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 會(huì)場(chǎng)布置合同范本
- 鄉(xiāng)鎮(zhèn)商品房出租合同范本
- pe管材及管件購(gòu)銷(xiāo)合同范本
- 協(xié)議離婚陰陽(yáng)合同范本
- 酒店投資合作合同范本
- 燒豬店鋪轉(zhuǎn)讓合同范本
- 櫥柜衣柜制作及其安裝合同范本
- 國(guó)際采購(gòu)合同范本
- 合法用工合同范本
- 教育機(jī)構(gòu)培訓(xùn)合同范本
- 白城2025年吉林大安市事業(yè)單位面向上半年應(yīng)征入伍高校畢業(yè)生招聘5人筆試歷年參考題庫(kù)附帶答案詳解
- 全球人工智能產(chǎn)業(yè)發(fā)展現(xiàn)狀和趨勢(shì)
- 2025年內(nèi)蒙古化工職業(yè)學(xué)院高職單招職業(yè)技能測(cè)試近5年??及鎱⒖碱}庫(kù)含答案解析
- 民法典解讀之婚姻家庭編
- 2025年菏澤醫(yī)學(xué)專(zhuān)科學(xué)校高職單招數(shù)學(xué)歷年(2016-2024)頻考點(diǎn)試題含答案解析
- 2025年漯河職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測(cè)試近5年??及鎱⒖碱}庫(kù)含答案解析
- Unit 2 What time is it?-A Let's spell(課件)-2024-2025學(xué)年人教PEP版英語(yǔ)四年級(jí)下冊(cè)
- 2024-2025學(xué)年人教版數(shù)學(xué)六年級(jí)下冊(cè)第二單元百分?jǐn)?shù)(二)(含答案)
- 創(chuàng)新教案:《歌唱二小放牛郎》在2025年音樂(lè)教學(xué)中的應(yīng)用
- 祖沖之的平生與貢獻(xiàn)
- 2025年版護(hù)理法律法規(guī)
評(píng)論
0/150
提交評(píng)論