.net调用支付宝的沙箱测试接口 完美调通(网页支付)

来源:互联网 发布:仙界网络直播间rar下载 编辑:程序博客网 时间:2024/04/28 02:41

最近做金融行业的项目,需要有支付功能,现在支持最多的就是支付宝和微信支付。支付宝在审核中,微信暂时不开发。
看了看支付宝的开放平台,有个沙箱环境,不就是公共测试的环境吗?那就顺便调通一下。看看原理。
前提是在支付宝开放平台有账号
首先在沙箱中创建应用,支付宝会帮你生成一个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、就是咱们自己的页面
这里写图片描述
我配置文件的回掉地址:图
这里写图片描述
接下来就可以在自己的页面进行数据的处理了