最近做金融行业的项目,需要有支付功能,现在支持最多的就是支付宝和微信支付。支付宝在审核中,微信暂时不开发。
看了看支付宝的开放平台,有个沙箱环境,不就是公共测试的环境吗?那就顺便调通一下。看看原理。
前提是在支付宝开放平台有账号
首先在沙箱中创建应用,支付宝会帮你生成一个APPID(待会会作为参数传递到沙箱)和其他一些商户信息和应用信息。支付宝网关也是自动生成的,也是固定的。
接下来是填写应用公钥,将鼠标悬浮在可以查看生成方法。生成的时候注意选择PKCS1格式,这个是非JAVA适用的,密码长度官方建议使用2048。把商户应用公钥复制到上面的图片中的设置应用公钥,注意,每次点击生成密钥生成的都不一样,传参数的时候要和你设置到沙箱中的公钥一致。如果忘记了可以查看保存在本地的文件,每次生成都保存在本地。
至于下边的RSA密钥,应用网关,等等都可以不设置。
接下来就是写代码了
第一步:在支付宝官网下载关于.net的SDK demo案例
网址:https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.Zpe5To&treeId=270&articleId=106291&docType=1
第二步:下载完后解压并新建自己的测试项目,添加现有项目‘找到解压好的文件添加后缀名为.csproj的文件’
然后添加相应的引用
或者添加引用 在sdk中的bin文件夹下的AOpSdk.dll文件
配置参数
/// <summary>
/// 因为嫌麻烦都写在web.config中
/// </summary>
static string URL = ConfigurationManager.AppSettings["url"];//沙箱的支付宝网网关
static string APP_ID = ConfigurationManager.AppSettings["appid"];//沙箱中的APPID
static string APP_PRIVATE_KEY = ConfigurationManager.AppSettings["APP_PRIVATE_KEY"];//自己生成的应用私匙
static string ALIPAY_PUBLIC_KEY = ConfigurationManager.AppSettings["ALIPAY_PUBLIC_KEY"];//沙箱中的支付宝公匙
static string AliPayReturn_url = ConfigurationManager.AppSettings["AliPayReturn_url"];//需要回调的地址支付成功后会直接调到此页面进行处理
参数完成,开始写实现前台有按钮的事件调到后台下面的代码
[HttpPost]
public void index()
{
DefaultAopClient client = new DefaultAopClient(URL, APP_ID, APP_PRIVATE_KEY, "json", "1.0", "RSA2", ALIPAY_PUBLIC_KEY, "utf-8", false);
// 外部订单号,商户网站订单系统中唯一的订单号
string out_trade_no = DateTime.Now.ToString("yyyyMMddHHmmss");
// 订单名称
string subject = "我靠";
// 付款金额
string total_amout = "0.01";
// 商品描述
string body = "12321345645";
// 组装业务参数model
AlipayTradePagePayModel model = new AlipayTradePagePayModel();
model.Body = body;
model.Subject = subject;
model.TotalAmount = total_amout;
model.OutTradeNo = out_trade_no;
model.ProductCode = "FAST_INSTANT_TRADE_PAY";
AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
// 设置同步回调地址
request.SetReturnUrl(AliPayReturn_url);
// 设置异步通知接收地址
request.SetNotifyUrl("");
// 将业务model载入到request
request.SetBizModel(model);
AlipayTradePagePayResponse response = null;
try
{
response = client.pageExecute(request, null, "post");
Response.Write(response.Body);
}
catch (Exception exp)
{
throw exp;
}
}///上面的代码可以在sdk源码中的pagepay文件夹下的pagepay.aspx.cs找到
然后是设置回调的页面的逻辑
public ActionResult ReturnUrl()
{
SortedDictionary<string, string> sPara = GetRequestGet();
int Result = 0;
if (sPara.Count > 0)//判断是否有带返回参数
{
bool flag = AlipaySignature.RSACheckV1(sPara, ALIPAY_PUBLIC_KEY, "utf-8", "RSA2", false);
if (flag)//验证成功
{
#region 验证成功对数据库执行操作
return Content("<script>alert('dfsalkfjl');</script>");
#endregion
}
else//验证失败
{
Result = 0;
// Cmn.Log.Write("异步支付验证失败!" + Request.Form);
}
}
else
{
return Content("<script>location.href='/pay/Index'</script>");
}
return View();
}
OK!
测试一下:
接着会回调到实现指定的回调页面如图
1、
2、
3、就是咱们自己的页面
我配置文件的回掉地址:图
接下来就可以在自己的页面进行数据的处理了