微信H5支付三步輕松搞定(C#)

目前想鹰,從商城網(wǎng)站紊婉、餐廳、商場(chǎng)辑舷、超市到菜市喻犁、小賣部、路邊攤,移動(dòng)支付無(wú)處不在肢础,極大地方便了我們的生活还栓。特別是微信支付,應(yīng)用極廣传轰,很受大眾歡迎剩盒。然而,對(duì)于擁有H5移動(dòng)商城的商家來(lái)說(shuō)慨蛙,微信支付只能在微信客戶端內(nèi)實(shí)現(xiàn)辽聊,而在微信中又無(wú)法使用支付寶,這是令人非常蛋疼的事股淡。

現(xiàn)在身隐,好消息來(lái)了!微信已全面開放了H5支付功能唯灵,它將實(shí)現(xiàn)在微信客戶端之外的H5商城網(wǎng)頁(yè)場(chǎng)景完成支付贾铝,極大地滿足了商家的收款需求和買家便捷支付的要求。

好東西當(dāng)然不能錯(cuò)過(guò)埠帕,但如何快速將H5支付功能嵌入到您的H5商城中呢垢揩?微信并沒(méi)有提供官方Demo可以參考。沒(méi)關(guān)系敛瓷,按照本文的方法叁巨,您不需要再花精力做額外的開發(fā),只需三步就能輕松搞定呐籽。

【我的思路】既然H5支付也是通過(guò)調(diào)用統(tǒng)一下單接口來(lái)實(shí)現(xiàn)锋勺,那么直接用官方提供的公眾號(hào)支付SDK(WxPayAPI_CS_v3)進(jìn)行擴(kuò)展和修改不就行了嗎?省時(shí)省力(本人比較懶狡蝶,能不折騰就盡量不折騰庶橱,哈哈)。

【準(zhǔn)備工作】一贪惹、您已經(jīng)調(diào)通了WxPayAPI_CS_v3(可以正常實(shí)現(xiàn)公眾號(hào)支付)苏章,二、您已經(jīng)開通了H5支付功能(需要去微信商戶平臺(tái)上申請(qǐng)開通)奏瞬。對(duì)這方面不清楚的朋友請(qǐng)查閱相關(guān)文檔枫绅,它不是本文所要討論的話題。

現(xiàn)在硼端,就讓我們開始吧并淋!

第一步

在WxPayAPI/ business文件夾下添加一個(gè)類,將其命名為H5Pay(可從JsApiPay.cs中復(fù)制相關(guān)代碼進(jìn)行修改珍昨,重點(diǎn)是將交易類型trade_type設(shè)置為MWEB县耽,另外還要傳遞終端IP)订咸,H5Pay.cs的完整代碼如下:

using System.Web;

namespace WxPayAPI

{

? ? public class H5Pay

? ? {

? ? ? ? public string GetPayUrl(string thip)

? ? ? ? {

? ? ? ? ? ? Log.Info(this.GetType().ToString(), "H5 pay url is producing...");

? ? ? ? ? ? WxPayData data = new WxPayData();

? ? ? ? ? ? data.SetValue("body",”商品描述”); //這里替換成你的數(shù)據(jù)

? ? ? ? ? ? data.SetValue("attach", "詳見我的訂單");//這里替換成你的數(shù)據(jù)

? ? ? ? ? ? data.SetValue("out_trade_no",”商戶訂單號(hào)”); //這里替換成你的數(shù)據(jù)

? ? ? ? ? ? data.SetValue("total_fee",”總金額”); //這里替換成你的數(shù)據(jù)

? ? ? ? ? ? data.SetValue("spbill_create_ip", thip);// 終端IP

? ? ? ? ? ? data.SetValue("trade_type", "MWEB");//交易類型

? ? ? ? ? ? data.SetValue("scene_info", "{'h5_info':{'type':'Wap','wap_url':'你的H5域名','wap_name':'你的商城名稱'}}");//場(chǎng)景信息

? ? ? ? ? ? WxPayData result = WxPayApi.UnifiedOrder(data);//調(diào)用統(tǒng)一下單接口

? ? ? ? ? ? string url = result.GetValue("mweb_url").ToString();//獲得統(tǒng)一下單接口返回的鏈接

? ? ? ? ? ? Log.Info(this.GetType().ToString(), "Get H5 pay url : " + url);

? ? ? ? ? ? return url;

? ? ? ? }

? ? }

}

說(shuō)明:GetPayUrl方法將返回微信支付中間頁(yè)的跳轉(zhuǎn)URL(即統(tǒng)一下單接口返回的mweb_url參數(shù))。

第二步

在example文件夾下添加一個(gè)Web窗體酬诀,將其命名為H5PayPage,前臺(tái)H5PayPage.aspx里不需要添加任何東西骆撇,在H5PayPage.aspx.cs中添加相關(guān)代碼瞒御,其完整代碼如下:

using System;

using System.Web;

namespace WxPayAPI

{

? ? public partial class H5PayPage : System.Web.UI.Page

? ? {

? ? ? ? protected void Page_Load(object sender, EventArgs e)

? ? ? ? {

? ? ? ? ? ? Log.Info(this.GetType().ToString(), "page load");

? ? ? ? ? ? H5Pay h5Pay = new H5Pay();

? ? ? ? ? ? string scip = GetIP();//獲取客戶端真實(shí)IP

? ? ? ? ? ? string url = h5Pay.GetPayUrl(scip);//通過(guò)統(tǒng)一下單接口進(jìn)行H5支付

? ? ? ? ? ? Response.Redirect(url); //跳轉(zhuǎn)到微信支付中間頁(yè)

? ? ? ? }


? ? ? ? //因H5支付要求商戶在統(tǒng)一下單接口中上傳用戶真實(shí)ip地址“spbill_create_ip”,故需要調(diào)用以下方法神郊。

? ? ? ? public string GetIP()

? ? ? ? {

? ? ? ? ? ? HttpRequest request = HttpContext.Current.Request;

? ? ? ? ? ? string result = request.ServerVariables["HTTP_X_FORWARDED_FOR"];

? ? ? ? ? ? if (string.IsNullOrEmpty(result))

? ? ? ? ? ? {

? ? ? ? ? ? ? ? result = request.ServerVariables["REMOTE_ADDR"];

? ? ? ? ? ? }

? ? ? ? ? ? if (string.IsNullOrEmpty(result))

? ? ? ? ? ? {

? ? ? ? ? ? ? ? result = request.UserHostAddress;

? ? ? ? ? ? }

? ? ? ? ? ? if (string.IsNullOrEmpty(result))

? ? ? ? ? ? {

? ? ? ? ? ? ? ? result = "0.0.0.0";

? ? ? ? ? ? }

? ? ? ? ? ? return result;

? ? ? ? }

? ? }

}

第三步

打開WxPayAPI/lib/WxPayApi.cs文件肴裙,找到UnifiedOrder方法,再找到如下4行原代碼:

inputObj.SetValue("appid", WxPayConfig.APPID);//公眾賬號(hào)ID

inputObj.SetValue("mch_id", WxPayConfig.MCHID);//商戶號(hào)

inputObj.SetValue("spbill_create_ip", WxPayConfig.IP);//終端ip

inputObj.SetValue("nonce_str", GenerateNonceStr());//隨機(jī)字符串

將其修改為:

//若終端IP未設(shè)置涌乳,則使用配置文件中的終端IP

if (!inputObj.IsSet("spbill_create_ip"))

{

inputObj.SetValue("spbill_create_ip", WxPayConfig.IP);//終端IP

}

inputObj.SetValue("appid", WxPayConfig.APPID);//公眾賬號(hào)ID

inputObj.SetValue("mch_id", WxPayConfig.MCHID);//商戶號(hào)

inputObj.SetValue("nonce_str", GenerateNonceStr());//隨機(jī)字符串

說(shuō)明:因?yàn)樵a傳遞給調(diào)用統(tǒng)一下單接口的終端IP是配置文件Config.cs中的默認(rèn)值(8.8.8.8)蜻懦,這樣肯定會(huì)出錯(cuò)(H5支付要求上傳用戶真實(shí)IP),因此需要加上一個(gè)判斷夕晓,即如果已經(jīng)設(shè)置了終端IP則不使用默認(rèn)值宛乃。

OK,這樣就行了蒸辆,是不是非常簡(jiǎn)單征炼?

【最后要說(shuō)的】其它平臺(tái)(如PHP、java等)照此思路操作也是一件很輕松的事兒躬贡。H5支付結(jié)果異步回調(diào)通知與公眾號(hào)支付(JSAPI支付)和掃碼支付都是統(tǒng)一的接口谆奥,如果你之前已做好了更新訂單的邏輯處理,那現(xiàn)在就不需要做重復(fù)勞動(dòng)了拂玻,是不是很爽酸些?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市檐蚜,隨后出現(xiàn)的幾起案子魄懂,更是在濱河造成了極大的恐慌,老刑警劉巖熬甚,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件逢渔,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡乡括,警方通過(guò)查閱死者的電腦和手機(jī)肃廓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)诲泌,“玉大人盲赊,你說(shuō)我怎么就攤上這事》笊ǎ” “怎么了哀蘑?”我有些...
    開封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵诚卸,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我绘迁,道長(zhǎng)合溺,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任缀台,我火速辦了婚禮棠赛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘膛腐。我一直安慰自己睛约,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開白布哲身。 她就那樣靜靜地躺著辩涝,像睡著了一般。 火紅的嫁衣襯著肌膚如雪勘天。 梳的紋絲不亂的頭發(fā)上怔揩,一...
    開封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音误辑,去河邊找鬼沧踏。 笑死,一個(gè)胖子當(dāng)著我的面吹牛巾钉,可吹牛的內(nèi)容都是我干的翘狱。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼砰苍,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼潦匈!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起赚导,我...
    開封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤茬缩,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后吼旧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體凰锡,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年圈暗,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了掂为。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡员串,死狀恐怖勇哗,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情寸齐,我是刑警寧澤欲诺,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布抄谐,位于F島的核電站,受9級(jí)特大地震影響扰法,放射性物質(zhì)發(fā)生泄漏蛹含。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一塞颁、第九天 我趴在偏房一處隱蔽的房頂上張望挣惰。 院中可真熱鬧,春花似錦殴边、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至板乙,卻和暖如春是偷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背募逞。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工蛋铆, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人放接。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓刺啦,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親纠脾。 傳聞我的和親對(duì)象是個(gè)殘疾皇子玛瘸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容