支付宝支付接入

2018/1/9 posted in  网站开发 DotNet

文档:

这篇文章只涉及到支付,不包含退款、查询等接口。其实基本上没什么好讲的,代码方面,支付宝已经都给封装好了,直接下载支付宝提供的SDK和Demo,拿过来改改就能用了,这里就记录下一些流程和所需信息所在的页面。

开发流程

  1. 申请应用 申请的应用必须要这两个功能
  2. 配置应用,看上面创建应用的文档就可以了。支付宝公钥通过上面提供的密钥生成工具生成填写即可。
  3. 撸代码,下载的SDK中有一个AopSdk.dll,引入

    PC:

    DefaultAopClient client = new DefaultAopClient("https://openapi.alipay.com/gateway.do", "应用的APPID","生成的私钥", "json", "1.0", "RSA2","生成的公钥", "UTF-8", false);
    
    // 组装业务参数model
    AlipayTradePagePayModel model = new AlipayTradePagePayModel();
    model.Body = ""; //商品描述
    model.Subject = ""; //商品简介
    model.TotalAmount = "100"; //商品金额
    model.OutTradeNo = ""; //订单编号
    model.ProductCode = "FAST_INSTANT_TRADE_PAY";
    
    AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
    // 设置同步回调地址
    request.SetReturnUrl("");
    // 设置异步通知接收地址
    request.SetNotifyUrl("");
    // 将业务model载入到request
    request.SetBizModel(model);
    
    try
    {
        var response = client.pageExecute(request, null, "post");
        return new AjaxResult
        {
            IsSuccess = true,
            ResponseData = response.Body
        };
    }
    catch (Exception exp)
    {
        return new AjaxResult
        {
            IsSuccess = false,
            Message = exp.Message
        };
    }
    

    手机:

    DefaultAopClient client = new DefaultAopClient("https://openapi.alipay.com/gateway.do", "应用的APPID", "生成的私钥", "json", "1.0", "RSA2","生成的公钥", "UTF-8", false);
    
    // 组装业务参数model
    AlipayTradeWapPayModel model = new AlipayTradeWapPayModel();
    model.Body = ""; //商品描述
    model.Subject = ""; //商品简介
    model.TotalAmount = "100"; //商品金额
    model.OutTradeNo = ""; //订单编号
    model.ProductCode = "QUICK_WAP_WAY";
    model.QuitUrl =""; //支付中止跳转的页面
    
    AlipayTradeWapPayRequest request = new AlipayTradeWapPayRequest();
    // 设置支付完成同步回调地址
    request.SetReturnUrl("");
    // 设置支付完成异步通知接收地址
    request.SetNotifyUrl("");
    // 将业务model载入到request
    request.SetBizModel(model);
    
    try
    {
        var response = client.pageExecute(request, null, "post");
        return new AjaxResult
        {
            IsSuccess = true,
            ResponseData = response.Body
        };
    }
    catch (Exception exp)
    {
        return new AjaxResult
        {
            IsSuccess = false,
            Message = exp.Message
        };
    }
    

常见问题

  • 暂时无法获取订单信息,请稍后再试。

    看看是不是订单的金额为零

  • 您使用的私钥格式错误,请检查RSA私钥配置,charset = UTF-8

    用工具生成密钥的是要选择对密钥格式,.net就选择PKCS1(非Java适用)

  • 回调签名验证失败

    一定要用 https://openhome.alipay.com/platform/keyManage.htm 这个地址下面,对应APPID的支付宝公钥(敲黑板,画重点,一定要是支付宝公钥,不是应用公钥,并且发起支付和验证回调签名的公钥是同一个)