模拟支付(支付宝)

1、 沙箱支付官网注册登录

在这里插入图片描述
填写信息,确认加入

在这里插入图片描述在这里插入图片描述

2、 进入管理中心–>研发服务–>沙箱环境–>扫码下载沙箱版支付宝(仅支持安卓系统)

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

3、 登录沙箱版支付宝(商家账号或买家账号)

注意: 登录的时候不可以使用自己真实的支付宝账号,只能用沙箱账号的商家账号或者是买家账号。

在这里插入图片描述
这只是支付的一种方式,也可以进行账号和密码来进行支付。

4、 首页文档–>开放能力–>下载SDK(软件开发工具包):下载SDK&DEMO即可

在这里插入图片描述在这里插入图片描述

一定要注意下载的版本

在这里插入图片描述

5、 创建一个新项目

在这里插入图片描述

6、 使用下载文件 --> bin目录下AopSdk.dll扩展–>放在自己项目的文件夹中

在这里插入图片描述
在这里插入图片描述需要添加引用,将上一步添加的dll文件添加进来。
不放在项目里面也可以使用,但是如果后期这个项目迁移了,可能就会找不到它了,所以建议和项目放在一起。
在这里插入图片描述

7、 使用pagepay.aspx代码块BtnAlipay_Click–>变成控制器动作方法

注意:不要复制 Protected,否则在自己项目中会报路径错误。

在这里插入图片描述
可以看到config报错了,别急,接着往下看

8、 复制App_Code文件夹下config.cs文件 并放入自己项目中,设置文件参数值

需要更改四个地方:APPID,支付宝网关,密钥,公钥。
前两个在:管理中心–>研发服务–>沙箱应用中可以看到
后两个需要安装密钥工具:接着看第9步
在这里插入图片描述

9、 公钥、私钥

公钥、私钥:首页文档–>开发工具–>支付宝开放平台–>开发助手简介–》工具下载–>win版

双击下载的应用程序,会出现下面界面,要注意密钥的格式,然后生成密钥:
如果将这个页面关掉,在打开密钥文件路径的地方也可以看到密钥。
在这里插入图片描述私钥:可以直接将私钥粘贴到项目中。
公钥:先将生成的公钥复制走 -->研发服务 --> 到沙箱环境中 --> 点击RSA2(SHA256)密钥(推荐)–> 设置
点击设置后会出现下面这个界面:
在这里插入图片描述保存设置后就会根据应用公钥生成一个新的支付宝公钥, 这个支付宝公约才是要往项目中放的。

10、新建一个视图模拟表单提交参数

控制器代码:

/// <summary>
/// 模拟发送请求页面(确认支付页面)
/// </summary>
/// <returns></returns>
// GET: ProductPay
public ActionResult Index()
{
    return View();
}

视图代码:

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>相当于支付页面</title>
</head>
<body>
    <form action="/ProductPay/PayClick" method="post">
        <label>商品名称</label>
        <input type="text" name="productName" value="" />
        <br />
        <label>商品价格</label>
        <input type="text" name="productMoney" value="" />
        <br />
        <input type="submit" value="支付" />
    </form>
</body>
</html>

点击支付,向支付宝发送支付请求的方法:

/// <summary>
/// 当点击支付按钮时的操作,封装sdk对象,向支付宝发送支付请求(后续的支付页面由官方提供)
/// </summary>
/// <returns></returns>
[HttpPost]
public ActionResult PayClick(string productName,string productMoney)
{
    DefaultAopClient client = new DefaultAopClient(config.gatewayUrl, config.app_id, config.private_key, "json", "1.0", config.sign_type, config.alipay_public_key, config.charset, false);

    // 外部订单号,商户网站订单系统中唯一的订单号
    string out_trade_no = DateTime.Now.ToString("yyyyMMddmmssfff");

    // 订单名称
    string subject = productName;

    // 付款金额
    string total_amount = productMoney;

    // 商品描述
    string body = productName;

    // 组装业务参数model
    AlipayTradePagePayModel model = new AlipayTradePagePayModel();
    model.Body = body;
    model.Subject = subject;
    model.TotalAmount = total_amount;
    model.OutTradeNo = out_trade_no;
    model.ProductCode = "FAST_INSTANT_TRADE_PAY";

    AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
    // 设置同步回调地址
    request.SetReturnUrl("");
    // 设置异步通知接收地址
    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;
    }
    return Content("");
}

运行支付成功,商家账户余额会增加,买家账户余额会减少。

11、创建同步方法,刷新页面(浏览器谷歌会使用异常)

在下载的demo里找到这个文件,打开

在这里插入图片描述打开文件后,将下面标注的代码拿走,放在自己的项目中。
注意:不要复制 Protected,否则在自己项目中会报路径错误。

在这里插入图片描述
控制器代码:

/// <summary>
/// 同步请求
/// </summary>
/// <returns></returns>
public ActionResult Return_Url()
{
	/* 实际验证过程建议商户添加以下校验。
	1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号,
	2、判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额),
	3、校验通知中的seller_id(或者seller_email) 是否为out_trade_no这笔单据的对应的操作方(有的时候,一个商户可能有多个seller_id/seller_email)
	4、验证app_id是否为该商户本身。*/
    Dictionary<string, string> sArray = GetRequestGet();
    if (sArray.Count != 0)
    {
        bool flag = AlipaySignature.RSACheckV1(sArray, config.alipay_public_key, config.charset, config.sign_type, false);
        if (flag)
        {
            return Content("同步验证通过");
        }
        else
        {
            return Content("同步验证失败");
        }
    }
    return Content("同步验证失败");
}
/// <summary>
/// 验签的方法
/// </summary>
/// <returns></returns>
public Dictionary<string, string> GetRequestGet()
{
    int i = 0;
    Dictionary<string, string> sArray = new Dictionary<string, string>();
    NameValueCollection coll;
    //coll = Request.Form;
    coll = Request.QueryString;
    String[] requestItem = coll.AllKeys;
    for (i = 0; i < requestItem.Length; i++)
    {
        sArray.Add(requestItem[i], Request.QueryString[requestItem[i]]);
    }
    return sArray;

}

写完上面的代码,也需要在第10步写的PayClick方法里 设置同步回调地址。

设置同步回调地址:带有http和端口号
在这里插入图片描述
如何查看端口号:1. 可以运行起来查看 2.项目右击–>属性–>Web–>服务器–>项目URL

异步注意:
设置异步通知接收地址:异步请求地址必须是外网环境

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1024节

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值