zoukankan      html  css  js  c++  java
  • .NET开发支付宝沙箱环境支付(实战篇)

      好了,上午写了支付宝沙箱环境支付功能的准备篇,接下来我们开始实战。

    先看看效果图:

     新建一个MVC项目,代码结构如下:

    第一步:新建项目

      

     注意红框部分使我们需要到支付宝开放平台下载的SDK,这个地方可能是个坑,我开始以为SDK是支付宝做好的Dll组件,直接引用到项目中就行,其实不是。这一块当时花了点时间,我把AliPaySdk文件夹打开截图放上来。

     这是从开放平台下载的SDK

     后来我下载下来的代码结构,直接拷贝到项目结构中,才知道之前的dll想法是错的。哈哈……

    第二步:View界面的代码

     1 <div>
     2     <table style="border:1px solid groove red">
     3         <tr style="border:1px solid groove red">
     4             <td>订单编号:</td>
     5             <td><input type="text" width="200" id="orderNo"></td>
     6         </tr>
     7         <tr style="border:1px solid groove red">
     8             <td>订单名称:</td>
     9             <td><input type="text" width="200" id="orderName"></td>
    10         </tr>
    11         <tr style="border:1px solid groove red">
    12             <td>付款金额:</td>
    13             <td><input type="text" width="200" id="count"></td>
    14         </tr>
    15         <tr style="border:1px solid groove red">
    16             <td>商品描述:</td>
    17             <td><input type="text" width="200" id="goodsMs"></td>
    18         </tr>
    19         <tr style="border:1px solid groove red">
    20             <td colspan="2"><input type="button" width="500" id="btnPay" value="付款"></td>
    21         </tr>
    22         <tr style="border:1px solid groove red">
    23             <td colspan="2"><input type="button" width="500" id="btnPay" value="付款"></td>
    24         </tr>
    25     </table>
    26 </div>
    27 @section Scripts
    28     {
    29     <script type="text/javascript" language="javascript">
    30         $().ready(function () {
    31             $("#btnPay").click(function () {
    32                 var orderNo = $("#orderNo").val();
    33                 var orderName = $("#orderName").val();
    34                 var count = $("#count").val();
    35                 var goodsMs = $("#goodsMs").val();
    36                 var dataObj = {
    37                     "OrderNo": orderNo,
    38                     "OrderName": orderName,
    39                     "Count": count,
    40                     "GoodsMs": goodsMs
    41                 };
    42                 $.ajax({
    43                     cache: false,
    44                     type: "POST",
    45                     data: { "str": JSON.stringify(dataObj)},
    46                     url: "/Home/PayRequest",
    47                     success: function (data)
    48                     {
    49                         //alert(data);
    50                         //alert(data.pay_url);
    51                         window.location.replace(data.pay_url);
    52                     },
    53                     error: function (data)
    54                     {
    55                         alert('失败!');
    56                     }
    57 
    58                 })
    59             })
    60         });
    61     </script>
    62 }
    View Code

    Controller中新建一个Action,这个Action中就是调用SDK请求支付宝沙箱环境。这里我目前只研究两个请求方式:1,网站直接请求支付宝支付网站;2.请求支付宝二维码。

    创建Action之前,我们需要做些配置就是我在准备篇中写的那些重要的参数。

                //沙箱环境,请求支付链接的地址           
                const string URL ="https://openapi.alipaydev.com/gateway.do";  
                //支付宝正式环境 
                //https://openapi.alipaydev.com/gateway.do   
                //APPID即创建应用后生成,沙箱环境中的AppId
                const string APPID = "*****";
                //这里是我们之前用秘钥工具生成的商户私钥
                const string APP_PRIVATE_KEY = "****";
                //参数返回格式,只支持json
                const string FORMAT = "json";
                //支持GBK和UTF-8
                const string CHARSET = "UTF-8";
                //支付宝公钥
                const string ALIPAY_PUBLIC_KEY =*****";
                
                IAopClient client = new DefaultAopClient(URL, APPID, APP_PRIVATE_KEY, FORMAT, "2.0", "RSA2", ALIPAY_PUBLIC_KEY, CHARSET, false);
                //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称如:
                AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();//创建API对应的request类,请求返回二维码
                AlipayTradePagePayRequest requestPagePay = new AlipayTradePagePayRequest();//请求返回支付宝支付网页
                AlipayTradePagePayModel model = new AlipayTradePagePayModel();            
                model.Body = order.GoodsMs;
                model.Subject = order.OrderName;
                model.TotalAmount = order.Count;
                model.OutTradeNo = order.OrderNo;
                model.StoreId = "William001";
                model.ProductCode = "FAST_INSTANT_TRADE_PAY";
                requestPagePay.SetBizModel(model);
                var response = client.SdkExecute(requestPagePay);//Execute(request);
                if (!response.IsError)
                {
                    var res = new
                    {
                        success = true,
                        out_trade_no = response.OutTradeNo,
                        //qr_code = response.QrCode,    //二维码字符串
                        pay_url = URL + "?" + response.Body
                    };
                    return Json(res);
                }
                else
                {
                    var res = new
                    {
                        success = false,
                    };
                    return Json(res);
                }

    我们的Controller中代码完成。这只是简单的有点逻辑。如果正式开发需要根据自己实际情况处理。

    几点注意的情况:

    1.AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();//创建API对应的request类,请求返回二维码

      AlipayTradePagePayRequest requestPagePay = new AlipayTradePagePayRequest();//请求返回支付宝支付网页

      var response = client.SdkExecute(requestPagePay);//Execute(request);

    根据不同的环境请求不同的支付接入。目前我只研究了两种,网页和二维码。二维码的暂时还没完成。

    2.你在沙箱环境中配置商户公钥一定要和你代码的私钥配对,否则无法完成支付请求。

     
  • 相关阅读:
    从veth看虚拟网络设备的qdisc
    深入学习golang(5)—接口
    深入学习golang(4)—new与make
    深入学习golang(3)—类型方法
    深入学习golang(2)—channel
    深入学习golang(1)—数组与切片
    Docker实践(6)—CentOS7上部署Kubernetes
    CoreOS实践(2)—在coreos上安装Kubernetes
    Docker实践(5)—资源隔离
    CoreOS实践(1)—CoreOS初体验
  • 原文地址:https://www.cnblogs.com/stoneWl/p/11434950.html
Copyright © 2011-2022 走看看