C#实现支付宝沙箱支付的项目实践
作者:IT_YAO 发布时间:2021-07-29 17:18:18
一,准备沙箱环境
1,登录支付宝,进入 应用列表界面 https://openhome.alipay.com/dev/workspace
2,如下图选择进入沙箱
进入如下页面:
1,这里的APPID很有用
2,在这里只测试网页支付,用系统默认的密钥
3,查看公钥有如下界面:
需要用到的是应用私钥(非JAVA)和支付宝公钥
二,认识官方提供的Demo示例
1,下载demo示例
进入网页 https://opendocs.alipay.com/open/270/106291
下载.NET版的demo,如下:
App_Code下有Config.cs文件
关于参数:
1,app_id 就填写沙箱界面的APPID
2,需要将gatewayUrl 改为:https://openapi.alipaydev.com/gateway.do 这才是测试版本
3,商户私钥 复制沙箱界面系统默认密钥的 应用私钥
4,支付宝公钥 复制沙箱界面的支付宝公钥
wappay里是具体的调用API接口
wappay是发送调用支付接口
close是关闭订单接口
query是查询订单接口
refund是退款接口
三,编写一个ASP.NET的程序
1,创建ASP.NET web项目
2,解决方案导入Demo示例中的AopSdk模块,如下:
3,前台代码:
<table>
<tr>
<td>订单名称:</td>
<td>
<asp:TextBox ID="tbxOrderName" runat="server"></asp:TextBox>
</td>
</tr>
<tr>
<td>订单金额:</td>
<td>
<asp:TextBox ID="tbxOrderAmount" runat="server"></asp:TextBox>
</td>
</tr>
<tr>
<td>订单描述:</td>
<td>
<asp:TextBox ID="tbxOrderDesc" runat="server"></asp:TextBox>
</td>
</tr>
<tr>
<td colspan="2">
<asp:Button ID="btn" runat="server" Text="支付" OnClick="btn_Click"/>
</td>
</tr>
</table>
4,后台代码:
// 应用ID,您的APPID
public static string app_id = "20210******";
// 支付宝网关
public static string gatewayUrl = "https://openapi.alipaydev.com/gateway.do";
// 商户私钥,您的原始格式RSA私钥
public static string private_key = "MIIE******";
// 支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
public static string alipay_public_key = "MIIBI******";
// 签名方式
public static string sign_type = "RSA2";
// 编码格式
public static string charset = "UTF-8";
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btn_Click(object sender, EventArgs e)
{
DefaultAopClient client = new DefaultAopClient(gatewayUrl, app_id, private_key, "json", "1.0", sign_type, alipay_public_key, charset, false);
// 外部订单号,商户网站订单系统中唯一的订单号
string out_trade_no = DateTime.Now.ToString("yyyyMMddHHmmss");
// 订单名称
string subject = this.tbxOrderName.Text;
// 付款金额
string total_amout = this.tbxOrderAmount.Text;
// 商品描述
string body = this.tbxOrderDesc.Text;
// 支付中途退出返回商户网站地址
string quit_url = "https://localhost:44334/PayFailed.aspx?tradeNo=" + out_trade_no;
// 支付成功返回商户网站页面
string return_url = "https://localhost:44334/PaySuccess.aspx?tradeNo=" + out_trade_no;
// 设置支付完成异步通知接收地址
string notify_url = "https://localhost:44334/Notify.aspx";
// 组装业务参数model
AlipayTradeWapPayModel model = new AlipayTradeWapPayModel();
model.Body = body;
model.Subject = subject;
model.TotalAmount = total_amout;
model.OutTradeNo = out_trade_no;
model.ProductCode = "QUICK_WAP_WAY";
model.QuitUrl = quit_url;
AlipayTradeWapPayRequest request = new AlipayTradeWapPayRequest();
// 设置支付完成同步回调地址
request.SetReturnUrl(return_url);
// 设置支付完成异步通知接收地址
request.SetNotifyUrl(notify_url);
// 将业务model载入到request
request.SetBizModel(model);
AlipayTradeWapPayResponse response = null;
try
{
response = client.pageExecute(request, null, "post");
Response.Write(response.Body);
}
catch (Exception exp)
{
throw exp;
}
说明:
1,这里的app_id等配置,就是来源于 Demo示例中的config.cs文件 需要从自己的支付宝沙箱中将相应的值复制进来
2,https://localhost:44334 这个地址和端口号是当前自己的项目的端口号
3,分别建立PaySuccess.aspx PayFailed.aspx 两个个窗体 分别用于支付成功和失败的跳转页面
4,Notify.aspx用于支付成功的异步通知用,可以不加
四,开始测试
调用成功,则进入如下界面
点击继续浏览器付款
点击支付宝账号登录
注意!这里不是真实的支付宝账号,需要用沙箱环境的支付宝账号,在沙箱界面中找:
支付成功后,点击右上角完成,则进入代码中设定的PaySuccess.aspx页面,同时也将订单编号等信息带过去。
至此,模拟支付成功,更多相关C# 支付宝沙箱支付内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
来源:https://blog.csdn.net/IT_YAO/article/details/123752463


猜你喜欢
- SpringBoot整合Mybatis自定义 * 不起作用Mybatis插件生效的方式:1. 原始的读取mybatis-config.xml
- Android Notification的多种用法总结我们在用手机的时候,如果来了短信,而我们没有点击查看的话,是不是在手机的最上边的状态栏
- 上一篇JavaMail入门第四篇 接收邮件中,控制台打印出的内容,我们无法阅读,其实,让我们自己来解析一封复杂的邮件是很不容易的,邮件里面格
- 下载及启动Nacos 下载地址:https://github.com/alibaba/nacos/releases在Windows下,进入b
- 写在前面在Java8之前的版本中,接口中只能声明常量和抽象方法,接口的实现类中必须实现接口中所有的抽象方法。而在Java8中,接口中可以声明
- 一、什么是锁擦除锁擦除是指虚拟机即时编译器(JIT)在运行时,对一些代码上要求同步,但是被检测到不可能存在共享数据竞争的锁进行擦除。锁擦除的
- 在网站开发中经常遇到级联数据的展示,比如选择城市的时候弹出的省市县选择界面。很多前端制作人员习惯于从JSON中而不是从数据库中获
- 1.背景倒计时的效果在网站或其他平台看到的很多了吧,今天就让我们来看看在OpenHarmony中如何实现它吧!2.效果预览视频效果演示传送门
- 本文实例讲述了Java操作redis实现增删查改功能的方法。分享给大家供大家参考,具体如下:首先,我们需要在windows下配置一个redi
- 最近做通讯录小屏机 联系人姓名显示--长度超过边界字体变小/** * 自定义TextView,文本内容自动调整字体大小以适应TextVie
- 在我们移动应用开发过程中,偶尔有可能会接到这种需求:1、在手机桌面创建一个窗口,类似于360的悬浮窗口,点击这个窗口可以响应(至于窗口拖动我
- 点击按钮返回顶部,直接上代码吧布局文件<LinearLayout xmlns:android="http://schemas
- 有序链表:按关键值排序。删除链头时,就删除最小(/最大)的值,插入时,搜索插入的位置。插入时需要比较O(N),平均O(N/2),删除最小(/
- 一、简介前面介绍了平时用到的大多数的多线程的例子,但在实际开发中使用的线程往往是大量的和更为复杂的,这时,每次都创建线程、启动线程。从性能上
- Java事件处理机制和适配器最重要的是理解事件源,监视器,处理事件的接口的概念。1.事件源:是能够产生时间的对象都可以叫事件源,比如文本框,
- 上篇教程回顾ServerSocket --监听客户端的连接,他的作用主要是建立一个连接-ServerSocket -建立连接,拿到一个Soc
- 背景断点续传下载一直是移动开发中必不可少的一项重要的技术,同样的Rxjava和Retrofit的结合让这个技术解决起来更加的灵活,我们完全可
- 本文基于SpringBoot 2.5.0-M2讲解Spring中Lifecycle和SmartLifecycle的作用和区别,以及如何控制S
- 根据数据库表名生成实体类公司用的jpa,没有用mybatis。所以也没有用mybatis自动生成。但有些数据库表字段太多,就想着一劳永逸了,
- 文件作为存储数据的单元,会根据数据类型产生很多分类,也就是所谓的文件类型。在对数据文件进行操作时,常常需要根据不同的文件类型来作不同的处理。