好了,上午写了支付宝沙箱环境支付功能的准备篇,接下来我们开始实战。
先看看效果图:
新建一个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.你在沙箱环境中配置商户公钥一定要和你代码的私钥配对,否则无法完成支付请求。