以下是支付宝沙箱的环境支付功能的效果图
新建一个MVC项目,代码结构如下:
第一步:新建项目
注意红框部分我们需要到支付宝开放平台下载的SDK,下载好后导入项目就可以了。这样也完成了开端。sdk下载地址https://opendocs.alipay.com/open/270/106291
第二步:View界面的代码
这是一个完整的前台页面
<h1>电脑扫码支付</h1>
<div>
<table style="border:1px solid groove red">
<tr style="border:1px solid groove red">
<td>订单名称:</td>
<td><input type="text" width="200" id="orderName", value=""></td>
</tr>
<tr style="border:1px solid groove red">
<td>付款金额:</td>
<td><input type="text" width="200" id="count" value=""></td>
</tr>
<tr style="border:1px solid groove red">
<td>商品描述:</td>
<td><input type="text" width="200" id="goodsMs" value=""></td>
</tr>
<tr style="border:1px solid groove red">
<td colspan="2"><input type="button" width="500" id="btnPay" value="付款"></td>
</tr>
</table>
</div>
@section Scripts
{
<script type="text/javascript">
$().ready(function () {
$("#btnPay").click(function () {
var orderName = $("#orderName").val();
var count = $("#count").val();
var goodsMs = $("#goodsMs").val();
var dataObj = {
"OrderName": orderName,
"Count": count,
"GoodsMs": goodsMs
};
console.log(dataObj)
$.ajax({
cache: false,
type: "Post",
data: { "Order": dataObj},
url: "/Home/index",
success: function (data)
{
//跳转支付宝沙箱扫码的页面
window.location.replace(data.pay_url);
},
error: function (data)
{
console.log(data)
alert('失败!');
}
})
})
});
</script>
}
我这里使用了模型绑定,所以要创建一个商品订单类,
public class Order
{
//商品描述
public string GoodsMs { get; set; }
//商品名称
public string OrderName { get; set; }
//商品价格
public string Count { get; set; }
//订单的编号
public string OrderNo { get; set; }
}
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 =*****";
我们的Controller中的Action代码完成。这只是简单的逻辑,代码中主要注意的几个地方,都已经有解释,如果正式开发需要根据自己实际情况处理。
[HttpPost]
public ActionResult index(Order order)
{
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 = DateTime.Now.ToString("yyyyMMddHHmmss"); ;//订单号我们是直接用日期产生的
model.StoreId = "William001";
model.ProductCode = "FAST_INSTANT_TRADE_PAY";
requestPagePay.SetBizModel(model);
//这是要注意的,支付后就要通过他完成回调,这里填写你要跳转页面的地址
requestPagePay.SetReturnUrl("http://47.106.255.80:8080/Snail/#/OrderDetailss");
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);
}
}
几点注意的情况:
1.AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();//创建API对应的request类,请求返回二维码
AlipayTradePagePayRequest requestPagePay = new AlipayTradePagePayRequest();//请求返回支付宝支付网页
var response = client.SdkExecute(requestPagePay);//Execute(request);
2.你在沙箱环境中配置商户公钥一定要和你代码的私钥配对,否则无法完成支付请求。