实例介绍
【实例简介】
【实例截图】
【核心代码】
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; }
}
}
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明


网友评论
我要评论