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("成功付款");
               
            }
          
        }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章