第三方支付 - 支付宝

时间:2024-02-23 14:04:21

支付宝支付流程

首先需要生成一系列键值对, 代表要提交给支付宝的业务和非业务参数

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 中.