在好例子网,分享、交流、成长!
您当前所在位置:首页C# 开发实例C#语言基础 → 微信扫码支付(winform)源码

微信扫码支付(winform)源码

C#语言基础

下载此实例
  • 开发语言:C#
  • 实例大小:1.32M
  • 下载次数:123
  • 浏览次数:1343
  • 发布时间:2018-08-23
  • 实例类别:C#语言基础
  • 发 布 人:天下无贼
  • 文件格式:.zip
  • 所需积分:5

实例介绍

【实例简介】

【实例截图】

from clipboard

【核心代码】

using System;
using System.Collections.Generic;
using System.Management;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Windows.Forms;
using System.Linq;
using Newtonsoft.Json;
using ThoughtWorks.QRCode.Codec;
using WindowsApplication1;

namespace WxPayAPI
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            //关闭对文本框的非法线程操作检查
            System.Windows.Forms.TextBox.CheckForIllegalCrossThreadCalls = false;
            this.Load  = new EventHandler(Form1_Load);
        }
        void Form1_Load(object sender, EventArgs e)
        {
            comboBox1.Items.Clear();
            comboBox1.Items.AddRange(GetBaseAddress().ToArray());
            if (comboBox1.Items.Count > 0)
            {
                comboBox1.SelectedIndex = 0;
            }
        }
        Thread threadWatch = null; //负责监听客户端的线程
        Socket socketWatch = null; //负责监听客户端的套接字
        //支付
        private void button1_Click(object sender, EventArgs e)
        {
            WxPayData result = MicroPay.Run("QQ", "1", textBox1.Text);

            //刷卡支付直接成功
            if (result.GetValue("return_code").ToString() == "SUCCESS" &&
                result.GetValue("result_code").ToString() == "SUCCESS")
            {
                MessageBox.Show("支付成功");
            }
            else
            {
                MessageBox.Show("支付失败");
            }

        }
        //查单
        private void button2_Click(object sender, EventArgs e)
        {
            WxPayData result = OrderQuery.Run(textBox2.Text, "");
            MessageBox.Show(result.ToXml());
        }
        //退单
        private void button3_Click(object sender, EventArgs e)
        {
            WxPayData result = Refund.Run(textBox3.Text, textBox3.Text, "1", "1");
            //刷卡支付直接成功
            if (result.GetValue("return_code").ToString() == "SUCCESS" &&
                result.GetValue("result_code").ToString() == "SUCCESS")
            {
                MessageBox.Show("退款成功");
            }
            else
            {
                MessageBox.Show("退款失败");
            }
        }
        //退单查询
        private void button4_Click(object sender, EventArgs e)
        {
            WxPayData result = RefundQuery.Run("", "", textBox4.Text, "");
            MessageBox.Show(result.ToXml());
        }
        //账单查询
        private void button5_Click(object sender, EventArgs e)
        {
            WxPayData result = DownloadBill.Run(textBox5.Text, "ALL");

            if (result.IsSet("result"))
            {
                //
                MessageBox.Show(result.ToXml());

                //解析出来的数据
                string[] ar = result.GetValue("result").ToString().Split(new char[] { '\r', '\n' });
                string[] dtstr = ar[2].Split(new char[] { ',', '`' });
                string str = dtstr[1];
                DateTime dt = Convert.ToDateTime(str);
                //ar[1] = ""
                //ar[0]  "交易时间,公众账号ID,商户号,子商户号,设备号,微信订单号,商户订单号,用户标识,交易类型,交易状态,付款银行,货币种类,总金额,企业红包金额,微信退款单号,商户退款单号,退款金额,企业红包退款金额,退款类型,退款状态,商品名称,商户数据包,手续费,费率"
                //ar[ar.Length-3]"总交易单数,总交易额,总退款金额,总企业红包退款金额,手续费总金额"
            }
            else if (result.IsSet("return_code") && result.IsSet("return_msg"))
            {
                MessageBox.Show(result.GetValue("return_code")   ":"   result.GetValue("return_msg"));
            }

            MessageBox.Show(result.ToXml());
        }

        //扫码支付
        private void button6_Click(object sender, EventArgs e)
        {
            NativePay nativePay = new NativePay();
            //生成扫码支付模式二url
            string url2 = nativePay.GetPayUrl(1, "123456789", "商品名称", "商品标记", "商品描述");
            //初始化二维码生成工具
            QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
            qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
            qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
            qrCodeEncoder.QRCodeVersion = 0;
            qrCodeEncoder.QRCodeScale = 4;

            //将字符串生成二维码图片
            pictureBox1.Image = qrCodeEncoder.Encode(url2, Encoding.Default);

            //if (nativePay.GetValue("return_code").ToString() == "SUCCESS" &&
            //    nativePay.GetValue("result_code").ToString() == "SUCCESS")
            //{
            //    //System.Console.WriteLine("支付成功");
            //    //result = nativePay.Body;
            //    //MessageBox.Show(result);
            //    MessageBox.Show("支付成功");
            //}
            //else
            //{
            //    MessageBox.Show("支付失败");
            //}
        }

        /****************************************************************************************************************************/

        private void button7_Click(object sender, EventArgs e)
        {
            //定义一个套接字用于监听客户端发来的信息  包含3个参数(IP4寻址协议,流式连接,TCP协议)
            socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            //服务端发送信息 需要1个IP地址和端口号
            IPAddress ipaddress = IPAddress.Parse(comboBox1.Text.Trim()); //获取文本框输入的IP地址
            //将IP地址和端口号绑定到网络节点endpoint上 
            IPEndPoint endpoint = new IPEndPoint(ipaddress, int.Parse("5555")); //获取文本框上输入的端口号
            //监听绑定的网络节点
            socketWatch.Bind(endpoint);
            //将套接字的监听队列长度限制为20
            socketWatch.Listen(20);
            //创建一个监听线程 
            threadWatch = new Thread(WatchConnecting);
            //将窗体线程设置为与后台同步
            threadWatch.IsBackground = true;
            //启动线程
            threadWatch.Start();
            button7.Enabled = false;
        }

        //创建一个负责和客户端通信的套接字 
        //Socket socConnection = null;

        /// <summary>
        /// 监听客户端发来的请求
        /// </summary>
        private void WatchConnecting()
        {
            try
            {
                while (true)  //持续不断监听客户端发来的请求
                {
                    socConnection = socketWatch.Accept();
                    MessageBox.Show("连接成功");
                    // textBox5.AppendText("\n客户端连接成功"   "\n");
                    // textBox5.AppendText("\n"   ""   "----------------------------------------------------------------");
                    //创建一个通信线程 
                    ParameterizedThreadStart pts = new ParameterizedThreadStart(ServerRecMsg);
                    Thread thr = new Thread(pts);
                    thr.IsBackground = true;
                    //启动线程
                    thr.Start(socConnection);
                }
            }
            catch (Exception)
            {
                MessageBox.Show("出错了");
                throw;
            }
        }

        /// <summary>
        /// 接收客户端发来的信息 
        /// </summary>
        /// <param name="socketClientPara">客户端套接字对象</param>
        private void ServerRecMsg(object socketClientPara)
        {
            Socket socketServer = socketClientPara as Socket;
            while (true)
            {
                //创建一个内存缓冲区 其大小为1024*1024字节  即1M
                byte[] arrServerRecMsg = new byte[1024 * 1024];
                //将接收到的信息存入到内存缓冲区,并返回其字节数组的长度
                int length = socketServer.Receive(arrServerRecMsg);
                //将机器接受到的字节数组转换为人可以读懂的字符串
                string strSRecMsg = Encoding.UTF8.GetString(arrServerRecMsg, 0, length);

                //如果是json格式则解析,反序列化
                if (strSRecMsg.IndexOf("{") != -1)
                {
                    var payMessage = JsonConvert.DeserializeObject<PayMessage>(strSRecMsg);
                    if (payMessage != null && payMessage.messageText.Contains("扫码"))
                    {
                        string barcode = payMessage.resultData.Split(",".ToCharArray()).LastOrDefault();
                        textBox1.Text = barcode;
                    }
                }
                //将发送的字符串信息附加到文本框txtMsg上  
                listBox1.Items.Add(strSRecMsg);
            }
        }

        public Socket socConnection { get; set; }

        /// <summary>
        /// 获取本机IP地址,如果有多块网卡需要在服务管理器里面选择
        /// </summary>
        /// <returns></returns>
        protected List<string> GetBaseAddress()
        {
            List<string> listIP = new List<string>();
            System.Management.ManagementClass mcNetworkAdapterConfig = new System.Management.ManagementClass("Win32_NetworkAdapterConfiguration");
            System.Management.ManagementObjectCollection moc_NetworkAdapterConfig = mcNetworkAdapterConfig.GetInstances();
            foreach (ManagementObject mo in moc_NetworkAdapterConfig)
            {
                string mServiceName = mo["ServiceName"] as string;
                //过滤非真实的网卡  
                if (!(bool)mo["IPEnabled"])
                { continue; }
                if (mServiceName.ToLower().Contains("vmnetadapter")
                 || mServiceName.ToLower().Contains("ppoe")
                 || mServiceName.ToLower().Contains("bthpan")
                 || mServiceName.ToLower().Contains("tapvpn")
                 || mServiceName.ToLower().Contains("ndisip")
                 || mServiceName.ToLower().Contains("sinforvnic"))
                { continue; }
                string[] mIPAddress = mo["IPAddress"] as string[];
                if (mIPAddress != null)
                {
                    foreach (string ip in mIPAddress)
                    {
                        if (ip != "0.0.0.0" && ip.IndexOf(":") == -1)
                        {
                            listIP.Add(ip);
                        }
                    }
                }
                mo.Dispose();
            }
            return listIP;
        }
    }
        public class PayMessage
        {
            public string businessCategory { get; set; }
            public int code { get; set; }
            public int identityNo { get; set; }
            public string messageText { get; set; }
            public string resultData { get; set; }
        }
}

实例下载地址

微信扫码支付(winform)源码

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警