支付宝 支付接口

支付宝有很多种支付产品,比如当面付、APP支付、手机网站支付、电脑网站支付等,本篇文章讲的是电脑网站支付

1.创建项目

新建一个ASP.NET Core2.0的MVC项目

 

2.沙箱环境

支付宝的支付接口需要商家账户才能使用,那么问题来了,我们开发者练习、测试时怎么办呢

支付宝为我们提供了蚂蚁沙箱环境,可以协助开发者进行接口功能及主要功能的测试

沙箱环境地址:https://openhome.alipay.com/platform/appDaily.htm?tab=info

3.生成密钥

进到开放平台-沙箱环境,会首先看到一个必看部分

分别是APPID、支付宝网关、密钥,这些都是之后开发时要用到的信息

(你们的密钥部分和我应该不太一样,因为我的已经设置过了)

这时你会发现密钥没有啊,那么密钥去哪获得呢

 

去下载支付宝官方提供的密钥生成工具

https://docs.open.alipay.com/291/105971

下载完成后打开 RSA签名验签工具.bat

点击 生成密钥 就会获得一个私钥和一个公钥

这时要注意几点

1.不是java开发的话,一定不要点Java适用,不然会出问题

2.私钥和公钥是对应的,如果私钥或公钥其中一个忘了,要重新生成一个,那么记得两个都换

3.这个公钥并不会在开发时用到,这个公钥是提供给支付宝的,给支付宝后,支付宝会再给你一个公钥,那个才是开发要使用的

 

生成公钥私钥后,记下来,然后回到开放平台,在密钥部分,把刚刚生成的公钥填上,然后就会得到一个支付宝公钥

 

接下来我们就可以开始开发了

 

配置SDK

新建一个Config类,在里面存储我们的配置

 public class Config
    {
        //应用ID,您的APPID
        public static string AppId = "";
        //支付宝网关
        public static string Gatewayurl = "";
        //商户秘钥,您的原始格式RSA秘钥
        public static string PrivateKey = "";
        //支付宝公钥
        public static string AlipayPublicKey = "";
        //签名方式
        public static string SignType = "RSA2";
        //编码格式
        public static string CharSet = "UTF-8";

    }

这些数据的值,从开放平台都能看到,按照自己的填上

秘钥是你之前生成的私钥,支付宝公钥是后来在开放平台把商户公钥设置之后,获得的支付宝公钥,别用错了

 

添加SDK

支付宝的SDK其实就是一个类库,直接引用就行了

Install-Package Alipay.AopSdk.Core

如果你要看SDK的源码

源码地址:https://github.com/dotnetcore/Alipay.AopSdk.Core

 

支付

添加一个控制器PayController

在控制器里写一个 发出支付请求 的方法

     /// <summary>
        /// 发起支付请求
        /// </summary>
        /// <param name="tradeno">外部订单号,商户网站订单系统唯一的订单号</param>
        /// <param name="subject">订单名称</param>
        /// <param name="totalAmout">实付金额</param>
        /// <param name="itemBody">商品描述</param>
        [HttpPost]
        public void PayRequest(OrderModel ordermodel)
        {
            DefaultAopClient client = new DefaultAopClient(Config.Gatewayurl, Config.AppId, Config.PrivateKey, "json", "2.0",
        Config.SignType, Config.AlipayPublicKey, Config.CharSet, false);

            // 组装业务参数model
            AlipayTradePagePayModel model = new AlipayTradePagePayModel();
            model.Body = ordermodel.itemBody;
            model.Subject = ordermodel.subject;
            model.TotalAmount = ordermodel.totalAmout;
            model.OutTradeNo = ordermodel.tradeno;
            model.ProductCode = "FAST_INSTANT_TRADE_PAY";

            AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
            // 设置同步回调地址
            request.SetReturnUrl("http://localhost:5000/Pay/Callback");
            // 设置异步通知接收地址
            request.SetNotifyUrl("");
            // 将业务model载入到request
            request.SetBizModel(model);

            var response = client.SdkExecute(request);
            Console.WriteLine($"订单支付发起成功,订单号:{ordermodel.tradeno}");
            //跳转支付宝支付
            Response.Redirect(Config.Gatewayurl + "?" + response.Body);
        }

这个方法需要几个参数(外部订单号、订单名称、付款金额、商品描述)

我们写一个页面,用来填写这些信息,并传给上面的方法

        /// <summary>
        /// 填写支付信息的页面
        /// </summary>
        /// <returns></returns>
        public IActionResult PayInfo()
        {
            return View();
        }    
<h2>PC网站支付</h2>
<form action="/Pay/PayRequest" method="post" role="form">
    <div>
        <p>商户订单号:</p>
        <input name="tradeno"  value="" />
    </div>
    <div>
        <p>订单名称:</p>
        <input name="subject" value="一毛钱的py交易" />
    </div>
    <div>
        <p>付款金额:</p>
        <input name="totalAmout" value="0.1" />
    </div>
    <div>
        <p>商品描述:</p>
        <input name="itemBody" value="py交易" />
    </div>
    <input type="submit" value="提交"/>
</form>

商户订单号也在开放平台中可以看到,在 选看部分

填好信息,点击提交

看到这样的页面就成功了

posted @ 2018-05-23 14:58  生命不息bug不止  阅读(526)  评论(0编辑  收藏  举报