好了,上午寫了支付寶沙箱環境支付功能的准備篇,接下來我們開始實戰。
先看看效果圖:
新建一個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 }
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.你在沙箱環境中配置商戶公鑰一定要和你代碼的私鑰配對,否則無法完成支付請求。