c# winform 支付宝付款

3 篇文章 0 订阅

添加支付宝付款,这里主要就是面对面付款,扫码支付,出来二维码,用户扫了之后就出现价格,内容,支付后获取结果,效果先放出来:在这里插入图片描述
说明:开始是要输入订单号的,由于订单号必须没有重复的,为了方便,我就连接了数据库,自动生成订单号。二维码出现之后,就每隔5s中询问是否成功。

1、官方文档:https://docs.open.alipay.com/194/106039/

2、沙箱环境介绍

为了可以使用支付宝,首先需要创建应用获取appid,这些步骤参考官方文档都有,但是,刚开始没有的时候,也可以使用支付宝提供的沙箱环境,https://openhome.alipay.com/platform/appDaily.htm在这里插入图片描述
这边它提供了相关的APPID和支付宝网关,但是RSA2密钥需要设置,后面在应用里会用到这个。

在这里插入图片描述
还有个沙箱钱包,可以下载一下,后面完成应用之后可以付款,试试行不行的,目前只有安卓。说明官网都有。

3、下载SDK

官网提供了Demo和SDK的下载
https://docs.open.alipay.com/194/105201/
但我觉得就.NET部分,这个demo我还是并不太明白的样子。

4、正式进行开发工作啦

  • 新建wpf项目之后,右击解决方案-》添加->现有项目在这里插入图片描述
    把下载的SDK里的项目加入进去。
  • 右击我们的窗体。添加引用。
  • 支付的整个过程如图所示
    在这里插入图片描述
    上面是宏观的过程
    具体看下面这个,其实官网已经写得很明白的,总的来说还是蛮简单的。
    在这里插入图片描述
    所以呢接下,我们先
    • 新建一个变量private IAopClient client;,初始化配置好

```csharp
 public AliPay()
        {
            client = new DefaultAopClient("https://openapi.alipaydev.com/gateway.do", 
            "你的appid", 
            "你的私钥" ,
             "json",
              "1.0", 
              "RSA2",
               "支付宝公钥"
              );
            
        }

第一个参数是网址,注意了正式的和沙箱环境的网址是不一样的。
第二个参数是appID,第三个是

  • 预下单:调用预下单接口alipay.trade.precreate
			AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();
            request.BizContent = "{" +
    "\"out_trade_no\":\"" + trade_no + "\"," +//商户订单号
    "\"total_amount\":" + trade_money + "," +
    "\"subject\":\"" +trade_subject + "\"," +
    " \"timeout_express\":\"90m\"}";
            
            AlipayTradePrecreateResponse response = client.Execute(request);

新建订单时要注意哦:商户订单号是唯一的。
response里面就保存了这次预订单生成的结果,
response.IsError如果是true,则有错,可以通过查看response.Msg来获取出错信息。
如果成功的话,response里会保存二维码网址。

  • 生成二维码
    通过response里面的网址,生成二维码,关于如何生成二维码,可以看看这篇文章:生成二维码
  • 将二维码生成成功并且放到窗口之后,用户就可以扫码了,如何检测用户是否扫成功呢?有两种方式,这边我用的是轮询,每隔5s查查结果,看看成功了没呀,到一定时间还没成功,那就支付失败啦。
    我新建了一个用来查询的线程。
private void Query()
        {
            Thread thread = new Thread(LoopQuery);
            thread.IsBackground = true;
            thread.Start();
        }
        private void LoopQuery(object msg)
        {
            int i = 0;
            AlipayTradeQueryRequest request = new AlipayTradeQueryRequest();
            request.BizContent = "{" +
                "\"out_trade_no\":\"" + trade_no + "\"" +
                "}";
            for (i = 0; i < 3; i++)
            {
                Thread.Sleep(5000);              //每隔5s查询一次
                AlipayTradeQueryResponse response = client.Execute(request);
                MessageBox.Show(response.Body);
                if (response.TradeStatus == "TRADE_SUCCESS")
                    break;
            }
            if (i>=3)
                MessageBox.Show("还未成功付款哦");
            else
            {
                MessageBox.Show("成功付款");
                state = 1;
            }
            database.InsertNewTradeRecord(trade_no, trade_subject, trade_money, state);
        }

好了,基本就这样啦。

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值