.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.你在沙箱環境中配置商戶公鑰一定要和你代碼的私鑰配對,否則無法完成支付請求。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM