文字說明;
前提:注冊、申請服務號,開通微信支付。
涉及到的參數:AppId、AppSecret、原始ID(自動回復)、mch_id(商戶號)、Key(商戶密鑰:自己設定。)
統一規范:
微信支付:
document.addEventListener('WeixinJSBridgeReady', function onBridgeReady() { //公眾號支付 jQuery('#wxPay').click(function(e){ WeixinJSBridge.invoke('getBrandWCPayRequest',{ "appId" : appId, //公眾號名稱,由商戶傳入 "timeStamp" : timeStamp, //時間戳 "nonceStr" : nonceStr, //隨機串 "package" : package, //格式:prepay_id=xxxx "signType" : signType, //簽名方式:MD5 "paySign" : paySign //簽名:生成簽名參數appId、timeStamp、nonceStr、package、signType、key 注意參數名大小寫。 },function(res){ if(res.err_msg == "get_brand_wcpay_request:ok" ) { window.location.href=url; //支付成功後跳轉到的頁面用於展示 } // else { // alert(res.err_code+res.err_desc+res.err_msg); // } }); }); }, false)
微信支付回調notify_url:
獲取xml格式參數,驗證簽名,處理邏輯(通知後台會多次回調,先檢查是否處理過,在執行)。
代碼區:
public string CreateSign(Dictionary<string, string> collection) { //排序 List<KeyValuePair<string, string>> list = new List<KeyValuePair<string, string>>(collection); list.Sort(delegate(KeyValuePair<string, string> pair1, KeyValuePair<string, string> pair2) { return pair1.Key.CompareTo(pair2.Key); }); StringBuilder sb = new StringBuilder(); foreach (KeyValuePair<string, string> pair in list) { sb.Append(pair.Key); sb.Append("="); sb.Append(pair.Value); sb.Append("&"); } string str = sb.Append("key=value").ToString(); string signValue = MD5(str).ToUpper(); //md5加密並轉換成大寫 return signValue ; }
public string DictionaryToXml(Dictionary<string, string> collection) { StringBuilder sb = new StringBuilder(); sb.Append("<xml>"); foreach (KeyValuePair<string, string> pair in collection) { sb.Append("<" + pair.Key + ">"); sb.Append("<![CDATA[" + pair.Value + "]]>"); sb.Append("</" + pair.Key + ">"); } sb.Append("</xml>"); return sb.ToString(); } public Dictionary<string, string> XmlToDictionary(XmlDocument doc) { Dictionary<string, string> collection = new Dictionary<string, string>(); foreach (XmlElement element in doc.DocumentElement.ChildNodes) { string key = element.Name; string value = element.InnerText; if (value != "") { collection.Add(key, value); } } return collection; }
public string GetJosnValue(string jsonStr, string key) { string result = string.Empty; if (!string.IsNullOrEmpty(jsonStr)) { key = "\"" + key.Trim('"') + "\""; int index = jsonStr.IndexOf(key) + key.Length + 1; if (index > key.Length + 1) { //先截逗號,若是最後一個,截“}”號,取最小值 int end = jsonStr.IndexOf(',', index); if (end == -1) { end = jsonStr.IndexOf('}', index); } //index = json.IndexOf('"', index + key.Length + 1) + 1; result = jsonStr.Substring(index, end - index); //過濾引號或空格 result = result.Trim(new char[] { '"', ' ', '\'' }); } } return result; }