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

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 = "填这里面";//商户的APPID

            public 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 = "填这里面";//商户的APPID

            public 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、最后打开沙箱版支付宝扫码付款就可以了

在这里插入图片描述

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

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

  • 17
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 18
    评论
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值