最近做金融行业的项目,需要有支付功能,现在支持最多的就是支付宝和微信支付。支付宝在审核中,微信暂时不开发。
看了看支付宝的开放平台,有个沙箱环境,不就是公共测试的环境吗?那就顺便调通一下。看看原理。
前提是在支付宝开放平台有账号
首先在沙箱中创建应用,支付宝会帮你生成一个APPID(待会会作为参数传递到沙箱)和其他一些商户信息和应用信息。支付宝网关也是自动生成的,也是固定的。
接下来是填写应用公钥,将鼠标悬浮在可以查看生成方法。生成的时候注意选择PKCS1格式,这个是非JAVA适用的,密码长度官方建议使用2048。把商户应用公钥复制到上面的图片中的设置应用公钥,注意,每次点击生成密钥生成的都不一样,传参数的时候要和你设置到沙箱中的公钥一致。如果忘记了可以查看保存在本地的文件,每次生成都保存在本地。
至于下边的RSA密钥,应用网关,等等都可以不设置。
接下来就是写代码了
第一步:在支付宝官网下载关于.net的SDK demo案例
网址:https://doc./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"];//沙箱中的APPIDstatic 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";// 组装业务参数modelAlipayTradePagePayModel 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载入到requestrequest.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、就是咱们自己的页面
我配置文件的回掉地址:图
接下来就可以在自己的页面进行数据的处理了