日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

微信支付笔记

發布時間:2023/11/27 生活经验 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 微信支付笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? 一、開發前的準備:

? ? ? ? 開發前需要配置支付授權目錄,支付相關的頁面全部要在這個指定的目錄中,不能在子目錄中。測試授權目錄和測試白名單可以不用管。

?? ?二、微信支付開發前需要這幾個參數:

? ? ? ?1、AppID?? ?在微信公眾號管理后臺(https://mp.weixin.qq.com/)的開發者中心獲取

? ? ? ?2、微信支付商戶號??在微信公眾號管理后臺(https://mp.weixin.qq.com/)的 微信支付 菜單下可以看到

? ? ? ?3、商戶密匙???微信商戶平臺(pay.weixin.qq.com)-->賬戶設置-->API安全-->密鑰設置

?

? ? 三、微信公眾號支付的邏輯是這樣的:

? ? ? ? ?1. 我們自己的系統生成待支付訂單信息 [訂單號、金額、商品名稱、說明等信息]

? ? ? ? ?2. 將系統的訂單信息使用統一下單的數據格式提交到微信服務器 ,微信服務器會返回一個預支付交易會話標識?prepay_id

? ? ? ? ? ? ??統一下單的API文檔:?https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_1

? ? ? ? ?3. 使用公眾號APPID和第二部返回的預支付交易會話標識?prepay_id,加上時間戳?timeStamp、?隨機字符串nonceStr ,簽名?paySign 生成js參數,在HTML頁面里完成支付

    ?網頁端調起支付API文檔: ??https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6

? ? ? ? ?4. 微信服務器異步通知我們服務器上的回調地址,完成支付

?

? ? 從第三部分的HTML頁面講起,我們看到官方文檔中微信的網頁支付的代碼是這樣的:

function onBridgeReady() {WeixinJSBridge.invoke('getBrandWCPayRequest', {"appId":"wx2421b1c4370ec43b",//公眾號名稱,由商戶傳入     "timeStamp":" 1395712654",//時間戳,自1970年以來的秒數     "nonceStr":"e61463f8efa94090b1f366cccfbbb444",//隨機串     "package":"prepay_id=u802345jgfjsdfgsdg888", "signType":"MD5", //微信簽名方式: "paySign":"70EA570631E4BB79628FBCA90534C63FF7FADD89" //微信簽名  }, function(res) { if (res.err_msg == "get_brand_wcpay_request:ok") {}  }); } if (typeof WeixinJSBridge == "undefined") { if (document.addEventListener) { document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false); } else if (document.attachEvent) { document.attachEvent('WeixinJSBridgeReady', onBridgeReady); document.attachEvent('onWeixinJSBridgeReady', onBridgeReady); } } else { onBridgeReady(); }

?

? ? 注意:這個JS需要在微信瀏覽器里面直接調用,無需引用其他js文件,其他瀏覽器是不行的.

? ? 第一次看到這個js腳本的時候比較奇怪,這里怎么沒有支付的金額、商品名稱、訂單號呢,后來才知道訂單的信息是需要提前提交給微信服務器的,這個提交的過程就叫統一下單

? ? 支付頁面的Javascript代碼很簡單,只有這幾個參數需要我們自己根據實際情況進行替換:

        "appId":"wx2421b1c4370ec43b",  //公眾號名稱,由商戶傳入  |  這個參數已知           "timeStamp":" 1395712654",     //時間戳,自1970年以來的秒數 | 寫個函數生成下即可,簡單           "nonceStr":"e61463f8efa94090b1f366cccfbbb444",       //隨機串 | 寫個函數生成下        "package":"prepay_id=u802345jgfjsdfgsdg888",    //prepay_id 就是前面提到的支付交易會話標識,具體怎么生成在后面講"signType":"MD5",                                    //微信簽名方式:固定的,填寫MD5即可             

//微信簽名 簽名生成方法可見API文檔 https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_3,我在文章后面會給出代碼
"paySign":"70EA570631E4BB79628FBCA90534C63FF7FADD89"

? ? 我們先搞定最簡單的部分:隨機字符串和時間戳的生成C#實現

        /// <summary>/// 隨機串 /// </summary>
        public static string getNoncestr(){Random random = new Random();return MD5Util.GetMD5(random.Next(1000).ToString(), "utf-8").ToLower().Replace("s", "S");}/// <summary>/// 時間截,自1970年以來的秒數/// </summary>
        public static string getTimestamp(){TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);return Convert.ToInt64(ts.TotalSeconds).ToString();}
View Code

?

? ?現在只有prepay_idpaySign目前不知道怎么產生的,另外幾個參數都搞定了。

? ?prepay_id需要通過統一下單接口https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_1獲取到,我們看這個接口要傳的參數有不少,新建一個UnifiedOrder類:

    /// <summary>/// 微信統一接口請求實體對象/// </summary>
    [Serializable]public class UnifiedOrder{/// <summary>/// 公共號ID(微信分配的公眾賬號 ID)/// </summary>public string appid = "";/// <summary>/// 商戶號(微信支付分配的商戶號)/// </summary>public string mch_id = "";/// <summary>/// 微信支付分配的終端設備號/// </summary>public string device_info = "";/// <summary>/// 隨機字符串,不長于 32 位/// </summary>public string nonce_str = "";/// <summary>/// 簽名/// </summary>public string sign = "";/// <summary>/// 商品描述/// </summary>public string body = "";/// <summary>/// 附加數據,原樣返回/// </summary>public string attach = "";/// <summary>/// 商戶系統內部的訂單號,32個字符內、可包含字母,確保在商戶系統唯一,詳細說明/// </summary>public string out_trade_no = "";/// <summary>/// 訂單總金額,單位為分,不能帶小數點/// </summary>public int total_fee = 0;/// <summary>/// 終端IP/// </summary>public string spbill_create_ip = "";/// <summary>/// 訂 單 生 成 時 間 , 格 式 為yyyyMMddHHmmss,如 2009 年12 月 25 日 9 點 10 分 10 秒表示為 20091225091010。時區為 GMT+8 beijing。該時間取自商戶服務器/// </summary>public string time_start = "";/// <summary>/// 交易結束時間/// </summary>public string time_expire = "";/// <summary>/// 商品標記 商品標記,該字段不能隨便填,不使用請填空,使用說明詳見第 5 節/// </summary>public string goods_tag = "";/// <summary>/// 接收微信支付成功通知/// </summary>public string notify_url = "";/// <summary>/// JSAPI、NATIVE、APP/// </summary>public string trade_type = "";/// <summary>/// 用戶標識 trade_type 為 JSAPI時,此參數必傳/// </summary>public string openid = "";/// <summary>/// 只在 trade_type 為 NATIVE時需要填寫。/// </summary>public string product_id = "";}
View Code

? ?用參數填充這個對象

        //統一下單UnifiedOrder order = new UnifiedOrder();order.appid = "1111111111111111";                   //公眾賬號ID,請替換成公眾號實際的appidorder.mch_id = "111111111111111";                   //調用接口提交的商戶號,請替換成真實的商戶號 order.device_info = "WEB";                          //終端設備號(門店號或收銀設備ID),注意:PC網頁或公眾號內支付請傳"WEB"  固定值order.nonce_str = TenpayUtil.getNoncestr();         //隨機字符串,不長于32位,見前面的隨機字符串函數 TenpayUtil代碼后面給出order.body = "xxxxxxx設備充值";                      //商品或支付單簡要描述order.attach = "這是一個支付測試訂單";                 //附加數據order.out_trade_no = "11111111111111111111111";     //商戶系統內部的訂單號,32個字符內、可包含字母,請替換成真實的訂單號order.total_fee = 0.01 * 100;                       //int類型,訂單總金額,單位為分,請填寫實際訂單金額order.spbill_create_ip = Page.Request.UserHostAddress;              //用戶端ip  11.11.11.11 格式order.notify_url = "http://baidu.com/notify_url.aspx"; //接收微信支付異步通知回調地址,請替換成真實的回調地址,回調頁面文章后面會給出例子  order.openid = "111111111111111111111111111111"; //trade_type=JSAPI,此參數必傳,請替換成用戶在商戶appid下的唯一標識,用戶的openid怎么獲取請參考微信開發的API文檔 order.trade_type = "JSAPI"; //交易類型 JSAPI--公眾號支付、NATIVE--原生掃碼支付、APP--app支付

? ? ? 將這些信息提交給微信服務器就能獲取到臨時支付交易會話標識?prepay_id了,下面代碼里的paySignKey是商戶密匙。

        //得到 prepay_id 微信生成的預支付回話標識,用于后續接口調用中使用,該值有效期為2小時string prepay_id = tenpay.getPrepay_id(order, paySignKey);    //tenapy代碼文章末尾給出string timeStamp = TenpayUtil.getTimestamp();   //時間戳 string nonceStr = TenpayUtil.getNoncestr();     //隨機字符串

? ? ?簽名參數paySign的獲取:

        // 4.根據得到的prepay_id計算paySign 簽名SortedDictionary<string, string> sParams = new SortedDictionary<string, string>();sParams.Add("appId", "1111111111111111111");        //請替換成真實的APPIDsParams.Add("timeStamp", timeStamp);sParams.Add("nonceStr", nonceStr);sParams.Add("package", "prepay_id=" + prepay_id);sParams.Add("signType", "MD5"); string paySign = tenpay.getsign(sParams, paySignKey); //得到 paySign 簽名 paySingKey 是商戶密匙

? ? ? 這樣paySign和prepay_id參數都成功獲取到了,將這些參數替換掉HTML頁面的js參數就可以彈出微信支付窗口:

? ? ? ? ? ? ? ? ? ? ? ? ??

?

需要用到的一些代碼:

TenpayUtil

    public class TenpayUtil{/// <summary>/// 統一支付接口/// </summary>const string UnifiedPayUrl = "https://api.mch.weixin.qq.com/pay/unifiedorder";/// <summary>/// 網頁授權接口/// </summary>const string access_tokenUrl = "https://api.weixin.qq.com/sns/oauth2/access_token";/// <summary>/// 微信訂單查詢接口/// </summary>const string OrderQueryUrl = "https://api.mch.weixin.qq.com/pay/orderquery";/// <summary>/// 隨機串/// </summary>public static string getNoncestr(){Random random = new Random();return MD5Util.GetMD5(random.Next(1000).ToString(), "utf-8").ToLower().Replace("s", "S");}/// <summary>/// 時間截,自1970年以來的秒數/// </summary>public static string getTimestamp(){TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);return Convert.ToInt64(ts.TotalSeconds).ToString();}/// <summary>/// 網頁授權接口/// </summary>public static string getAccess_tokenUrl(){return access_tokenUrl;}/// <summary>/// 獲取微信簽名/// 將集合M內非空參數值的參數按照參數名ASCII碼從小到大排序/// 格式(即key1=value1&key2=value2…)拼接成字符串stringA/// https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_3/// </summary>/// <param name="sParams">集合M</param>/// <param name="key">key設置路徑:微信商戶平臺(pay.weixin.qq.com)-->賬戶設置-->API安全-->密鑰設置</param>/// <returns></returns>public string getsign(SortedDictionary<string, string> sParams, string key){int i = 0;string sign = string.Empty;StringBuilder sb = new StringBuilder();foreach (KeyValuePair<string, string> temp in sParams){if (temp.Value == "" || temp.Value == null || temp.Key.ToLower() == "sign"){continue;}i++;sb.Append(temp.Key.Trim() + "=" + temp.Value.Trim() + "&");}sb.Append("key=" + key.Trim() + "");string signkey = sb.ToString();sign = MD5Util.GetMD5(signkey, "utf-8");return sign;}/// <summary>/// Post數據到指定接口并返回數據/// </summary>/// <param name="url">地址</param>/// <param name="postData">要提交的數據</param>/// <returns></returns>public string PostXmlToUrl(string url, string postData){string returnmsg = "";Bird.Net.Http.HttpHelper httpHelper = new Bird.Net.Http.HttpHelper();httpHelper.Encoding = Encoding.UTF8;returnmsg = httpHelper.GetHtml(url, postData, true);/*using (System.Net.WebClient wc = new System.Net.WebClient()){returnmsg = wc.UploadString(url, "POST", postData);}*/return returnmsg;}public string order_request_data = "";public string order_post_data = "";/// <summary>/// 統一下單獲取prepay_id/// </summary>/// <param name="order">統一下單</param>/// <param name="key">商戶密匙</param>/// <returns>prepay_id</returns>public string getPrepay_id(UnifiedOrder order, string key){string prepay_id = "";order_post_data = getUnifiedOrderXml(order, key);order_request_data = PostXmlToUrl(UnifiedPayUrl, order_post_data);SortedDictionary<string, string> requestXML = GetInfoFromXml(order_request_data);foreach (KeyValuePair<string, string> k in requestXML){if (k.Key == "prepay_id"){prepay_id = k.Value;break;}}return prepay_id;}/// <summary>/// 獲取微信訂單明細/// </summary>public OrderDetail getOrderDetail(QueryOrder queryorder, string key){string post_data = getQueryOrderXml(queryorder, key);string request_data = PostXmlToUrl(OrderQueryUrl, post_data);OrderDetail orderdetail = new OrderDetail();SortedDictionary<string, string> requestXML = GetInfoFromXml(request_data);foreach (KeyValuePair<string, string> k in requestXML){switch (k.Key){case "retuen_code":orderdetail.result_code = k.Value;break;case "return_msg":orderdetail.return_msg = k.Value;break;case "appid":orderdetail.appid = k.Value;break;case "mch_id":orderdetail.mch_id = k.Value;break;case "nonce_str":orderdetail.nonce_str = k.Value;break;case "sign":orderdetail.sign = k.Value;break;case "result_code":orderdetail.result_code = k.Value;break;case "err_code":orderdetail.err_code = k.Value;break;case "err_code_des":orderdetail.err_code_des = k.Value;break;case "trade_state":orderdetail.trade_state = k.Value;break;case "device_info":orderdetail.device_info = k.Value;break;case "openid":orderdetail.openid = k.Value;break;case "is_subscribe":orderdetail.is_subscribe = k.Value;break;case "trade_type":orderdetail.trade_type = k.Value;break;case "bank_type":orderdetail.bank_type = k.Value;break;case "total_fee":orderdetail.total_fee = k.Value;break;case "coupon_fee":orderdetail.coupon_fee = k.Value;break;case "fee_type":orderdetail.fee_type = k.Value;break;case "transaction_id":orderdetail.transaction_id = k.Value;break;case "out_trade_no":orderdetail.out_trade_no = k.Value;break;case "attach":orderdetail.attach = k.Value;break;case "time_end":orderdetail.time_end = k.Value;break;default:break;}}return orderdetail;}/// <summary>/// 把XML數據轉換為SortedDictionary[string, string]集合/// </summary>/// <param name="strxml">XML數據</param>/// <returns>集合</returns>public SortedDictionary<string, string> GetInfoFromXml(string xmlstring){SortedDictionary<string, string> sParams = new SortedDictionary<string, string>();try{XmlDocument doc = new XmlDocument();doc.LoadXml(xmlstring);XmlElement root = doc.DocumentElement;int len = root.ChildNodes.Count;for (int i = 0; i < len; i++){string name = root.ChildNodes[i].Name;if (!sParams.ContainsKey(name)){sParams.Add(name.Trim(), root.ChildNodes[i].InnerText.Trim());}}}catch { }return sParams;}/// <summary>/// 微信統一下單接口xml參數整理/// </summary>/// <param name="order">微信支付參數實例</param>/// <param name="key">商戶密鑰</param>/// <returns></returns>protected string getUnifiedOrderXml(UnifiedOrder order, string key){string return_string = string.Empty;SortedDictionary<string, string> sParams = new SortedDictionary<string, string>();sParams.Add("appid", order.appid);sParams.Add("attach", order.attach);sParams.Add("body", order.body);sParams.Add("device_info", order.device_info);sParams.Add("mch_id", order.mch_id);sParams.Add("nonce_str", order.nonce_str);sParams.Add("notify_url", order.notify_url);sParams.Add("openid", order.openid);sParams.Add("out_trade_no", order.out_trade_no);sParams.Add("spbill_create_ip", order.spbill_create_ip);sParams.Add("total_fee", order.total_fee.ToString());sParams.Add("trade_type", order.trade_type);order.sign = getsign(sParams, key);sParams.Add("sign", order.sign);//拼接成XML請求數據StringBuilder sbPay = new StringBuilder();foreach (KeyValuePair<string, string> k in sParams){if (k.Key == "attach" || k.Key == "body" || k.Key == "sign"){sbPay.Append("<" + k.Key + "><![CDATA[" + k.Value + "]]></" + k.Key + ">");}else{sbPay.Append("<" + k.Key + ">" + k.Value + "</" + k.Key + ">");}}return_string = string.Format("<xml>{0}</xml>", sbPay.ToString());return return_string;}/// <summary>/// 微信訂單查詢接口XML參數整理/// </summary>/// <param name="queryorder">微信訂單查詢參數實例</param>/// <param name="key">密鑰</param>/// <returns></returns>protected string getQueryOrderXml(QueryOrder queryorder, string key){string return_string = string.Empty;SortedDictionary<string, string> sParams = new SortedDictionary<string, string>();sParams.Add("appid", queryorder.appid);sParams.Add("mch_id", queryorder.mch_id);sParams.Add("transaction_id", queryorder.transaction_id);sParams.Add("out_trade_no", queryorder.out_trade_no);sParams.Add("nonce_str", queryorder.nonce_str);queryorder.sign = getsign(sParams, key);sParams.Add("sign", queryorder.sign);//拼接成XML請求數據StringBuilder sbPay = new StringBuilder();foreach (KeyValuePair<string, string> k in sParams){if (k.Key == "attach" || k.Key == "body" || k.Key == "sign"){sbPay.Append("<" + k.Key + "><![CDATA[" + k.Value + "]]></" + k.Key + ">");}else{sbPay.Append("<" + k.Key + ">" + k.Value + "</" + k.Key + ">");}}return_string = string.Format("<xml>{0}</xml>", sbPay.ToString().TrimEnd(','));return return_string;}}
View Code

MD5Util

    public class MD5Util{public MD5Util() { }/** 獲取大寫的MD5簽名結果 */public static string GetMD5(string encypStr, string charset){string retStr;MD5CryptoServiceProvider m5 = new MD5CryptoServiceProvider();//創建md5對象byte[] inputBye;byte[] outputBye;try{inputBye = Encoding.UTF8.GetBytes(encypStr);}catch (Exception ex){inputBye = Encoding.UTF8.GetBytes(encypStr);}outputBye = m5.ComputeHash(inputBye);retStr = System.BitConverter.ToString(outputBye);retStr = retStr.Replace("-", "").ToUpper();return retStr;}}
View Code

OrderDetail

    /// <summary>/// 微信訂單明細實體對象/// https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1/// </summary>
    [Serializable]public class OrderDetail{/// <summary>/// 返回狀態碼,SUCCESS/FAIL 此字段是通信標識,非交易標識,交易是否成功需要查看trade_state來判斷/// </summary>public string return_code = "";/// <summary>/// 返回信息返回信息,如非空,為錯誤原因 簽名失敗 參數格式校驗錯誤/// </summary>public string return_msg = "";/// <summary>/// 公共號ID(微信分配的公眾賬號 ID)/// </summary>public string appid = "";/// <summary>/// 商戶號(微信支付分配的商戶號)/// </summary>public string mch_id = "";/// <summary>/// 隨機字符串,不長于32位/// </summary>public string nonce_str = "";/// <summary>/// 簽名詳見簽名算法 https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_3/// </summary>public string sign = "";/// <summary>/// 業務結果,SUCCESS/FAIL /// 此字段是通信標識,非交易標識,交易是否成功需要查看result_code來判斷/// </summary>public string result_code = "";/// <summary>/// 錯誤代碼    詳細參見第6節錯誤列表/// </summary>public string err_code = "";/// <summary>/// 錯誤代碼描述/// </summary>public string err_code_des = "";/// <summary>/// 交易狀態///SUCCESS—支付成功///REFUND—轉入退款///NOTPAY—未支付///CLOSED—已關閉///REVOKED—已撤銷///USERPAYING--用戶支付中///NOPAY--未支付(輸入密碼或確認支付超時) PAYERROR--支付失敗(其他原因,如銀行返回失敗)/// </summary>public string trade_state = "";/// <summary>/// 終端設備號(門店號或收銀設備ID),注意:PC網頁或公眾號內支付請傳"WEB"/// </summary>public string device_info = "";/// <summary>/// 用戶在商戶appid下的唯一標識/// </summary>public string openid = "";/// <summary>/// 用戶是否關注公眾賬號,Y-關注,N-未關注,僅在公眾賬號類型支付有效/// </summary>public string is_subscribe = "";/// <summary>/// 交易類型,取值如下:JSAPI,NATIVE,APP,詳細說明見參數規定/// </summary>public string trade_type = "";/// <summary>/// 銀行類型,采用字符串類型的銀行標識/// </summary>public string bank_type = "";/// <summary>/// 訂單總金額,單位為分/// </summary>public string total_fee = "";/// <summary>/// 現金券支付金額<=訂單總金額,訂單總金額-現金券金額為現金支付金額
        /// </summary>public string coupon_fee = "";/// <summary>/// 貨幣類型,符合ISO 4217標準的三位字母代碼,默認人民幣:CNY/// </summary>public string fee_type = "";/// <summary>/// 微信支付訂單號/// </summary>public string transaction_id = "";/// <summary>/// 商戶系統的訂單號,與請求一致。/// </summary>public string out_trade_no = "";/// <summary>/// 商家數據包,原樣返回/// </summary>public string attach = "";/// <summary>/// 支付完成時間,格式為yyyyMMddhhmmss,如2009年12月27日9點10分10秒表示為20091227091010。/// 時區為GMT+8 beijing。該時間取自微信支付服務器/// </summary>public string time_end = "";}
View Code

UnifiedOrder

    /// <summary>/// 微信統一接口請求實體對象/// </summary>
    [Serializable]public class UnifiedOrder{/// <summary>/// 公共號ID(微信分配的公眾賬號 ID)/// </summary>public string appid = "";/// <summary>/// 商戶號(微信支付分配的商戶號)/// </summary>public string mch_id = "";/// <summary>/// 微信支付分配的終端設備號/// </summary>public string device_info = "";/// <summary>/// 隨機字符串,不長于 32 位/// </summary>public string nonce_str = "";/// <summary>/// 簽名/// </summary>public string sign = "";/// <summary>/// 商品描述/// </summary>public string body = "";/// <summary>/// 附加數據,原樣返回/// </summary>public string attach = "";/// <summary>/// 商戶系統內部的訂單號,32個字符內、可包含字母,確保在商戶系統唯一,詳細說明/// </summary>public string out_trade_no = "";/// <summary>/// 訂單總金額,單位為分,不能帶小數點/// </summary>public int total_fee = 0;/// <summary>/// 終端IP/// </summary>public string spbill_create_ip = "";/// <summary>/// 訂 單 生 成 時 間 , 格 式 為yyyyMMddHHmmss,如 2009 年12 月 25 日 9 點 10 分 10 秒表示為 20091225091010。時區為 GMT+8 beijing。該時間取自商戶服務器/// </summary>public string time_start = "";/// <summary>/// 交易結束時間/// </summary>public string time_expire = "";/// <summary>/// 商品標記 商品標記,該字段不能隨便填,不使用請填空,使用說明詳見第 5 節/// </summary>public string goods_tag = "";/// <summary>/// 接收微信支付成功通知/// </summary>public string notify_url = "";/// <summary>/// JSAPI、NATIVE、APP/// </summary>public string trade_type = "";/// <summary>/// 用戶標識 trade_type 為 JSAPI時,此參數必傳/// </summary>public string openid = "";/// <summary>/// 只在 trade_type 為 NATIVE時需要填寫。/// </summary>public string product_id = "";}
View Code

回調頁面測試:

public partial class tools_WeChat_Pay_notify_url : System.Web.UI.Page
{protected void Page_Load(object sender, EventArgs e){//接收從微信后臺POST過來的數據System.IO.Stream s = Request.InputStream;int count = 0;byte[] buffer = new byte[1024];StringBuilder builder = new StringBuilder();while ((count = s.Read(buffer, 0, 1024)) > 0){builder.Append(Encoding.UTF8.GetString(buffer, 0, count));}s.Flush();s.Close();s.Dispose();TenpayUtil payUtil = new TenpayUtil();SortedDictionary<string, string> requestXML = payUtil.GetInfoFromXml(builder.ToString());const string paySignKey = "111111111111111111111111111111111111";string sing = payUtil.getsign(requestXML, paySignKey);if (requestXML.ContainsKey("return_code")){//Response.Write(requestXML["return_code"]);
        }//成功返回Response.Write("<xml>");Response.Write("<return_code><![CDATA[SUCCESS]]></return_code>");Response.Write("<return_msg><![CDATA[OK]]></return_msg>");Response.Write("</xml>");}/// <summary>/// 從XML數據中獲取值/// </summary>/// <param name="requestXML">XML數據</param>/// <param name="key">Key</param>/// <returns>Value</returns>public string getVal(SortedDictionary<string, string> data, string key){if (data.ContainsKey(key)){return data[key];}return "";}
}
View Code

?

轉載于:https://www.cnblogs.com/relax/p/4935636.html

總結

以上是生活随笔為你收集整理的微信支付笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。