啪嗒!( 搬好小板凳 )
大家好,本次学习的内容是在博主大一winform窗体项目中实现的一个功能——支付宝扫码支付;
主要功能通过支付宝包向我们提供的SDK程序包,与支付宝沙箱中的验证/调试接口功能实现;
本次学习博主将直接把饭喂大家嘴里,想学的同学认真看,不想学的同学认真CV;( =.=!!! )
看完记得给博主好评 !!!;( QAQ )
https://open.alipay.com/platform/home.htm
这一步是因为在C#中支付宝向我们提供了整个SDK程序包,包括二维码生成的程序包。因此我们完全不需要去官网中再去下载
第二点就是去官网下载的SDK程序包是需要引用的,如果你的项目是多人开发项目 到时候在《GIt》中推送到远端时所引用的路径是绝对路径,每个人的路径都不一样;因此每次都获取不到引用的内容,每次都需要修改路径,灰常的麻烦~~~;
(踩坑博主在线踩坑,博主一开始没想到这一点,结果就是因为这一点导致博主连夜加班重构了整个项目,血的教训 ( QAQ ) )
这里选择需要引用的项目 进行安装即可;
然后最重要的一步!!!
那就是!!!
《静静的等待安装完成即可》( x_x )
可喜可贺!恭喜大家认真的看到这里啦 现在又到最重要的一步啦( delete -->“又”);(>.<)
我们可以在窗体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();
}
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();
}
}
}
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表示图片填充
}
}
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表示图片填充
}
}
}
}
最后的测试也没问题,可能每个人还会碰到一些其他的问题 慢慢来吧
本次喂饭式学习就结束了!记得点赞! (>.<)