C# Winform窗体项目实现支付宝扫码支付

一、内容介绍

啪嗒!( 搬好小板凳 )

大家好,本次学习的内容是在博主大一winform窗体项目中实现的一个功能——支付宝扫码支付;

主要功能通过支付宝包向我们提供的SDK程序包,与支付宝沙箱中的验证/调试接口功能实现;

本次学习博主将直接把饭喂大家嘴里,想学的同学认真看,不想学的同学认真CV;( =.=!!! )

看完记得给博主好评 !!!;( QAQ )

二、环境准备

1、首先进入支付宝开放平台;

https://open.alipay.com/platform/home.htm

2、手机使用支付宝扫码登录;
3、如果是第一次使用的同学 点击 《立即入驻》;

4、进行实名验证;

5、成功之后进管理平台,找到控制台中的沙箱 ;

6、进入沙箱之后会自动生成我们应用的基本信息;

7、其中《APPID》、《支付宝网关地址》与开发信息中的点击系统默认密钥的《查看》中生成的密钥都是我们后期代码中需要的参数;直接C下来(参数中的一个字母都不能错);
8、这里是我们的三个密钥,因为我们是C#项目所以《应用私钥》选择非Java语言;先不管C就完了;


9、可喜可贺 前期的准备工作就结束了啦,接下来进入代码开发环节;

三、程序包导入

1、打开Visual Studio创建一个新winform项目;
2、添加《lable》、《button》、《PictureBox》、《TextBox》控件;

3、在控件属性中将《PictureBox》控件中的Size Mode属性改成Zoom,用于生成二维码时填充整个控件;
4、右击解决方案选择《管理NuGet程序包》;

这一步是因为在C#中支付宝向我们提供了整个SDK程序包,包括二维码生成的程序包。因此我们完全不需要去官网中再去下载

第二点就是去官网下载的SDK程序包是需要引用的,如果你的项目是多人开发项目 到时候在《GIt》中推送到远端时所引用的路径是绝对路径,每个人的路径都不一样;因此每次都获取不到引用的内容,每次都需要修改路径,灰常的麻烦~~~;

(踩坑博主在线踩坑,博主一开始没想到这一点,结果就是因为这一点导致博主连夜加班重构了整个项目,血的教训 ( QAQ ) )

5、在《NeGet》中 搜索《Alipay.AopSdk.Core》和《Alipay.AopSdk.F2F》这两个由支付宝提供程序包;

6、继续搜索《QRCoder》程序包;

这里选择需要引用的项目 进行安装即可;

然后最重要的一步!!!

那就是!!!

《静静的等待安装完成即可》( x_x )

四、封装 类《 AliPayHelper 》;

可喜可贺!恭喜大家认真的看到这里啦 现在又到最重要的一步啦( delete -->“又”);(>.<)

1、代码解析;

我们可以在窗体Form1中直接代码操作,但是为了方便后期的修改,我重新的定义了一个类《 AliPayHelper 》

这个类用于封装一些请求支付宝网关的参数和 亿点点定义的方法

/* 这一大坨纯废话   不用C 不想深入了解的同学直接略C下面的代码块 (>.<)
第一步 在《AliPayHelper》这个类中 引用程序包中提供的一些类
第二步 定义一个公共参数,其中的参数就是 2_7 中所提到的内容(忘记的拉出去)
第三步 就是给第二步所定义的公共参数传参
第四步 写一个支付回调 查看用户支付
*/// V V V 这一坨是第一步
// 引用类
using System;
using System.Threading;
using System.Windows.Forms;
using Alipay.AopSdk.Core;
using Alipay.AopSdk.Core.Request;
using Alipay.AopSdk.Core.Response;// V V V 这一坨是第二步
// 公共参数
public static IAopClient client = new DefaultAopClient(AliPayConfigs.serverUrl, AliPayConfigs.appId, AliPayConfigs.merchant_private_key, AliPayConfigs.json, AliPayConfigs.version, AliPayConfigs.sign_type, AliPayConfigs.alipay_public_key, AliPayConfigs.charset, false);// V V V 这一坨是第三步
// 给公共参数传参
public class AliPayConfigs{public static string alipay_public_key = "填这里面";//支付宝公钥public static string merchant_private_key = "填这里面";//商户私钥--应用私钥public static string appId = "填这里面";//商户的APPIDpublic static string serverUrl = "填这里面"; // 网关地址public static string charset = "utf-8"; // 不用改!public static string sign_type = "RSA2"; // 不用改!public static string json = "json"; // 不用改!public static string version = "1.0"; // 不用改!}// V V V 这一坨是第四步
// 支付回调
// 博主这里只写了支付成功的情况;
// 例如请求超时,退出支付的情况就需要大家去好好学习啦
// https://opendocs.alipay.com/apis/api_1/alipay.trade.wap.pay 给同学们挂一个API学习链接public static String Text1; // 订单编号 在form1中赋值 没有这个是会报错滴
public static void Query(){new Thread(() => {int i = 0;AlipayTradeQueryRequest request = new AlipayTradeQueryRequest();request.BizContent = "{" +"\"out_trade_no\":\"" + Text1 + "\"" +"}";while (true){Thread.Sleep(1000); // 每隔一秒,查询一次 查看是否支付成功AlipayTradeQueryResponse response = client.Execute(request);if (response.Code == "10000"){MessageBox.Show("支付成功!");break;}}}).Start();}
2、完整代码
using Alipay.AopSdk.Core;
using Alipay.AopSdk.Core.Request;
using Alipay.AopSdk.Core.Response;
using System;
using System.Threading;
using System.Windows.Forms;namespace Start_Form
{class AliPayHelper{public static String Text1;//公共参数public static IAopClient client = new DefaultAopClient(AliPayConfigs.serverUrl, AliPayConfigs.appId, AliPayConfigs.merchant_private_key, AliPayConfigs.json, AliPayConfigs.version, AliPayConfigs.sign_type, AliPayConfigs.alipay_public_key, AliPayConfigs.charset, false);public class AliPayConfigs{public static string alipay_public_key = "填这里面";//支付宝公钥public static string merchant_private_key = "填这里面";//商户私钥--应用私钥public static string appId = "填这里面";//商户的APPIDpublic static string serverUrl = "填这里面"; // 网关地址public static string charset = "utf-8"; // 不用改!public static string sign_type = "RSA2"; // 不用改!public static string json = "json"; // 不用改!public static string version = "1.0"; // 不用改!}public static String Text1;public static void Query(){new Thread(() => {int i = 0;AlipayTradeQueryRequest request = new AlipayTradeQueryRequest();request.BizContent = "{" +"\"out_trade_no\":\"" + Text1 + "\"" +"}";while (true){Thread.Sleep(1000);AlipayTradeQueryResponse response = client.Execute(request);if (response.Code == "10000"){MessageBox.Show("支付成功!");break;}}}).Start();}}
}
五、Form1窗口事件生成
1、定义一个生成二维码的方法
public void AliPayCode(){AlipayTradeWapPayRequest request = new AlipayTradeWapPayRequest();AlipayTradeAppPayModel aliPayRequest = new AlipayTradeAppPayModel()//这个类内容在最下面{OutTradeNo = textBox1.Text,// 订单号号,商户订单号(注:订单号要唯一)TotalAmount =  textBox1.Text,//订单金额Subject = "随便写"//标题Body = "随便写",ProductCode = "QUICK_MSECURITY_PAY",};request.SetBizModel(aliPayRequest);AlipayTradeWapPayResponse response = client.SdkExecute(request);if (response.IsError == true){MessageBox.Show("唤起支付宝二维码失败,请联系开发人员");this.Close();}else{string payaddress = AliPayConfigs.serverUrl + "?" + response.Body;QRCodeGenerator qrGenerator = new QRCoder.QRCodeGenerator();QRCodeData qrCodeData = qrGenerator.CreateQrCode(payaddress, QRCodeGenerator.ECCLevel.L);QRCode qrcode = new QRCode(qrCodeData);pictureBox1.Image = qrcode.GetGraphic(5, Color.Black, Color.White, null, 15, 6, false);//将字符串生成二维码图片//pictureBox1的SizeMode属性设为:Zoom表示图片填充}}
2、完整代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Alipay.AopSdk.Core.Domain;
using Alipay.AopSdk.Core.Request;
using Alipay.AopSdk.Core.Response;
using QRCoder;
using static WindowsFormsApp1.AliPayHelper;namespace WindowsFormsApp1
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){AliPayHelper.Text1 = textBox1.Text; // 获取订单编号 传给Query 否则报错AlipayCode(); // 生成二维码Query(); // 支付回调}public void AliPayCode(){AlipayTradeWapPayRequest request = new AlipayTradeWapPayRequest();AlipayTradeAppPayModel aliPayRequest = new AlipayTradeAppPayModel()//这个类内容在最下面{OutTradeNo = textBox1.Text,// 订单号号,商户订单号(注:订单号要唯一)TotalAmount = textBox2.Text,//订单金额Subject = "随便填",//标题Body = "随便填",ProductCode = "QUICK_MSECURITY_PAY",};request.SetBizModel(aliPayRequest);AlipayTradeWapPayResponse response = client.SdkExecute(request);if (response.IsError == true){MessageBox.Show("唤起支付宝二维码失败,请联系开发人员");this.Close();}else{string payaddress = AliPayConfigs.serverUrl + "?" + response.Body;QRCodeGenerator qrGenerator = new QRCoder.QRCodeGenerator();QRCodeData qrCodeData = qrGenerator.CreateQrCode(payaddress, QRCodeGenerator.ECCLevel.L);QRCode qrcode = new QRCode(qrCodeData);pictureBox1.Image = qrcode.GetGraphic(5, Color.Black, Color.White, null, 15, 6, false);//将字符串生成二维码图片//pictureBox1的SizeMode属性设为:Zoom表示图片填充}}}
}

六、功能测试

1、全部的代码编写就已经完成了,接下来就是功能测试
2、我们回到支付宝开放平台控制台中 找到 《沙箱工具 》下载《支付宝客户端沙箱版》

3、下载安装完成后 再找到控制台中《沙箱账户》这里会提供测试时使用的商家账号 和 买家账号
4、最后使用邮箱登录 填写买家账户和密码 登录 最后运行程序
5、最后打开沙箱版支付宝扫码付款就可以了

最后的测试也没问题,可能每个人还会碰到一些其他的问题 慢慢来吧

本次喂饭式学习就结束了!记得点赞! (>.<)

C# Winform窗体实现支付宝扫码支付相关推荐

  1. VB.net开发微信、支付宝扫码支付源码

    扫码消费机介绍:https://item.taobao.com/item.htm?spm=a1z10.1-c.w4004-21914722028.2.2b826baawDkx32&id=170 ...

  2. 支付宝扫码支付-PC版(沙箱环境)

    前言 最近开发了PC端支付宝扫码支付的功能,使用的是沙箱环境.所谓的沙箱环境,其实就是支付宝提供的测试环境(毕竟正式环境需要营业执照等信息进行注册,注册通过后还有一些流程,才能进行正式的扫码支付.对于 ...

  3. VFP开发微信、支付宝扫码支付

    &&扫码消费机介绍:https://item.taobao.com/item.htm?spm=a1z10.1-c.w4004-21914722028.4.2b826baa9cTxs0& ...

  4. Delphi7微信、支付宝扫码支付源码

    扫码消费机介绍: https://item.taobao.com/item.htm?spm=a1z10.1-c.w4004-21914722028.4.2b826baaYipq2n&id=17 ...

  5. java调用支付宝扫码支付接口

    说明: 由于没有商户账号,所以本文使用的是沙箱账号,本质跟真实账号是一样的,是支付宝为了方便开发人员开发调试而推出的策略.在真实开发中将商户公钥等修改为真实的商户即可. 支付基本流程 用户下单 商户账 ...

  6. java实现支付宝扫码支付详细步骤

    支付宝扫码支付API文档地址:https://opendocs.alipay.com/open/194/106078         , 先配置好public_lkey和private_key 在支付 ...

  7. 【SpringBoot深入浅出系列】SpringBoot之实现支付宝扫码支付(沙箱环境编码实现)

    目录 一.准备工作 1.应用 APPID 2.商户私钥,即应用私钥 3.支付宝公钥 4.签名方式 5.字符编码格式 6.支付宝网关 二.沙箱环境编码实现 1.项目说明 2.创建 Spring Init ...

  8. 支付宝扫码支付模式平台介绍

    互联网在逐渐普及过程中,智能手机逐渐成为人们日常生活内主要电子设备.互联网支付在逐渐普及过程中,移动支付也逐渐出现在人们日常生活工作内,互联网支付企业也逐渐参与到线下支付行列内.第三方支付企业在为社会 ...

  9. Java-Spring Boot支付宝扫码支付以及支付回调

    前言:最近开发支付宝支付功能,总结一下做个分享 官方文档:https://opendocs.alipay.com/apis 支付宝沙箱地址: https://openhome.alipay.com/p ...

最新文章

  1. linu逻辑分区动态调整大小
  2. 总结MYSQL的优化
  3. 我好像还没睡醒,在说胡话...
  4. java vote_vote投票系统java jsp mysql
  5. 310. Minimum Height Trees
  6. 一种内核到用户空间的高效数据传输技术
  7. javaweb(07) Servlet详解
  8. mysql oracle linux_mysql、oracle在Linux和Windows下的简单自动备份
  9. mysql复购率_MYSQL系列(5) 电商常用指标查询
  10. 【云周刊】第148期:“盲人摸象、感而不动、雾里看花”,阿里闵万里谈城市大脑三大挑战...
  11. Atitit. 二进制数据ascii表示法,与base64编码解码api 设计标准化总结java php c#.net...
  12. kafka+多线程实现案例+Callable
  13. git 上传本地项目到githut中
  14. List<? extends T>和List<? super T>之间的区别
  15. win7系统备份还原软件_傲梅轻松备份bug导致系统还原0x81000203错误,
  16. 2020浙江省赛打铁记
  17. java font好看的字体_解决Java字体难看的问题
  18. 小丁带你走进git的世界四-重写历史记录
  19. 金仓数据库KingbaseES数据库参考手册(服务器配置参数14. 版本和平台兼容性)
  20. 2022/4/5 Git从入门到精通(精简版)

热门文章

  1. 此文让你至少走三年弯路
  2. 【Mac双系统设置系统默认启动系统】解决方案
  3. ubuntu22.04连网/peap/WPA2/MSCHAPv2
  4. 虚拟服务器上 加密狗 u8,T+12.1标准版,客户服务器是在虚拟机上的,使用硬加密,是否支持在客户端上插上加密狗注册就可以,不用吧加密狗再插到服务器虚拟机上?...
  5. python寻峰算法_python/scipy的寻峰算法
  6. word读入富文本编辑器,编辑后导出下载word日常总结
  7. 2019ubc转学分计算机科学gpa,吐血整理2019年本科转学分申请UBC
  8. pb 如何导出csv_打开CSV格式文件?英雄请留步
  9. RSSI 平面 三点定位算法(C语言、JS源码例程)
  10. 形态学 - 击中-击不中变换