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.你在沙箱环境中配置商户公钥一定要和你代码的私钥配对,否则无法完成支付请求。

     
  • 相关阅读:
    每日一篇文献:Robotic pick-and-place of novel objects in clutter with multi-affordance grasping and cross-domain image matching
    每日一篇文献:Intuitive Bare-Hand Teleoperation of a Robotic Manipulator Using Virtual Reality and Leap Motion
    每日一篇文献:Virtual Kinesthetic Teaching for Bimanual Telemanipulation
    HEBI Robotic Arm VR Teleoperation
    「iQuotient Case」AR device teleoperated robotic arm
    VR and Digital Twin Based Teleoperation of Robotic Arm
    HEBI Robotic Arm VR Teleoperation
    Human Robot Interaction
    Immersive Teleoperation Project
    机器人演示学习
  • 原文地址:https://www.cnblogs.com/stoneWl/p/11434950.html
Copyright © 2011-2022 走看看