支付宝支付流程
首先需要生成一系列键值对, 代表要提交给支付宝的业务和非业务参数
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 中.