支付寶支付流程
首先需要生成一系列鍵值對, 代表要提交給支付寶的業務和非業務參數
var param = new Dictionary<string, string>(); param.Add("_input_charset", "編碼,如:utf-8"); param.Add("body", "商品描述"); param.Add("notify_url", "支付寶異步返回的通知鏈接"); param.Add("out_trade_no", "商戶的唯一訂單號"); param.Add("partner", "商戶號"); param.Add("payment_type", "支付類型, 默認1"); param.Add("qr_pay_mode", "支付模式"); param.Add("return_url", "支付寶同步跳轉的鏈接"); param.Add("seller_id", "賣家商戶號=商戶號"); param.Add("service", "調用接口, 如:create_direct_pay_by_user"); param.Add("subject", "商品詳情"); param.Add("total_fee", "價格");
之后需要對這些鍵值對按照 key 的 ASCII 碼值排序
然后重新編碼成 key1=value1&key2=value2 的形式 (不包含 sign, sign_type, 以及空值的參數)
var str = StringHelper.ConcatParamToUrl(param);
之后在這串新編碼之后鏈接上 md5key
str = str + md5key;
並用MD5加密成一個字符串
var md5 = StringHelper.MD5Encrypt(str);
最后添加到參數中
param.Add("sign", "簽名"); param.Add("sign_type", "簽名方式");
將整個參數集合並成URL
https://mapi.alipay.com/gateway.do?_input_charset=utf-8&body=value............
直接跳轉到這個鏈接
支付完成后, 支付寶將主動通過 notify_url 設定的網址返回
注意: 通過 notify_url 返回將不通過商戶網站的登陸驗證機制, 並且notify_url的地址要能被互聯網訪問到
你需要在這個url中接受支付寶的通知信息, 做業務處理 並返回 success
[HttpPost] public ActionResult AliNotifyUrlAsyn() { // 參數 string out_trade_no; string trade_status; string gmt_payment; // 業務處理 return Content("success"); }
最后支付寶會自動跳轉到你設定的 return_url 中.