c# WinForm--微信Native支付

1 了解Native支付流程

我用的是模式二,模式二的流程如下
在这里插入图片描述

2 如何将Demo用在我的WinForm里面

打开Demo工程,复制里面的lib 、third文件夹到我的工程下,添加引用,引用的内容就是third文件夹里的。还有Demo里面的business文件夹,里面的代码可以参考(复制)哦。说明:打开lib文件夹,看到DemoConfig.cs了吗,在这个文件里写入我们的商户号,appid,密钥,以及url,这几个必填项,这个DemoConfg类重写了IConfig,后面设计到appid等的地方,都可以通过函数自动读取,就不需要每次都填写啦。

3 生成订单

首先要下个单,主要想要的是下单之后返回的url,这样我们才能生成需要的二维码让人家给钱嘛,下单api,自己去官网看啦,必填的都要填上,不是必填的你就看着填把。
接下去这段代码就是下单,并获取url的函数

public string GetPayUrl(string tradeid)
        {
          
            string url="";
            WxPayData data = new WxPayData();
            data.SetValue("body", textBox_Name.Text);//商品描述
            data.SetValue("attach", "test");//附加数据
            data.SetValue("out_trade_no", tradeid);
            data.SetValue("total_fee", int.Parse(textBox_money.Text));//总金额
            data.SetValue("time_start", DateTime.Now.ToString("yyyyMMddHHmmss"));//交易起始时间
            data.SetValue("time_expire", DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss"));//交易结束时间
            data.SetValue("goods_tag", "jjj");//商品标记
            data.SetValue("trade_type", "NATIVE");//交易类型
            data.SetValue("product_id", "111");//商品ID

            WxPayData result = WxPayApi.UnifiedOrder(data);//调用统一下单接口
            MessageBox.Show(result.GetValue("return_code").ToString()+result.GetValue("return_msg").ToString());
            if (result.GetValue("err_code_des") != null)
                MessageBox.Show(result.GetValue("err_code_des").ToString());
            if(result.GetValue("code_url")!=null)
                  url = result.GetValue("code_url").ToString();//获得统一下单接口返回的二维码链接

            Log.Info(this.GetType().ToString(), "Get native pay mode 2 url : " + url);
            return url;
        }

4 生成二维码

这里可以参照这篇博客

5接着是查询结果

虽然说官方文档说要异步通知,但是我目前不知道我的窗体程序如何接受来自微信的消息,也不知道怎么回复收到的消息,用的是轮询,来获取支付结果,这里可以知道结果,但是也有个问题,就是微信方没有收到来自我的答复,就会一直发送结果。。。。。目前还无法解决,后面在了解一下。
以下是查询,开了个新线程。

private void Query()
        {
            Thread thread = new Thread(LoopQuery);
            thread.IsBackground = true;
            thread.Start();
        }

        private void LoopQuery(object msg)
        {
            int i = 0;
            WxPayData Querydata = new WxPayData();
            Querydata.SetValue("out_trade_no", textBox_id.Text);
            for (i = 0; i < 3; i++)
            {
                Thread.Sleep(5000);              //每隔5s查询一次
                WxPayData result = WxPayApi.OrderQuery(Querydata, 6);
                MessageBox.Show(result.ToString());
                var code = result.GetValue("return_code").ToString();
                MessageBox.Show(code + result.GetValue("return_msg").ToString());
                if (code == "SUCCESS")
                {
                    var state = result.GetValue("trade_state").ToString();
                    MessageBox.Show(state);
                    if (state == "SUCCESS")
                        break;
                }
              
            }
            if (i >= 3)
                MessageBox.Show("还未成功付款哦");
            else
            {
                MessageBox.Show("成功付款");
               
            }
          
        }
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值