文字說明;
前提:注冊、申請服務號,開通微信支付。
涉及到的參數: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;
}