• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > c#版在pc端发起微信扫码支付的实例

c#版在pc端发起微信扫码支付的实例

作者:vinsonLu 字体:[增加 减小] 来源:互联网 时间:2017-05-28

vinsonLu 通过本文主要向大家介绍了c#pc发短信,c#串口编程实例,c#窗口界面设计实例,c#web开发实例,c#实例视频教程等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

等了好久,微信官方终于发布了.net的demo。

主要代码:

/**
  * 生成直接支付url,支付url有效期为2小时,模式二
  * @param productId 商品ID
  * @return 模式二URL
  */
  public string GetPayUrl(string productId, string body, string attach, int total_fee, string goods_tag)
  {
   Log.Info(this.GetType().ToString(), "Native pay mode 2 url is producing...");

   WxPayData data = new WxPayData();
   data.SetValue("body", body);//商品描述
   data.SetValue("attach", attach);//附加数据
   data.SetValue("out_trade_no", productId);//随机字符串
   data.SetValue("total_fee", total_fee);//总金额
   data.SetValue("time_start", DateTime.Now.ToString("yyyyMMddHHmmss"));//交易起始时间
   data.SetValue("time_expire", DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss"));//交易结束时间
   data.SetValue("goods_tag", goods_tag);//商品标记
   data.SetValue("trade_type", "NATIVE");//交易类型
   data.SetValue("product_id", productId);//商品ID

   WxPayData result = WxPayApi.UnifiedOrder(data);//调用统一下单接口
   string url = result.GetValue("code_url").ToString();//获得统一下单接口返回的二维码链接

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

</div>

配置信息:

public class Config
 {
  //=======【基本信息设置】=====================================
  /* 微信公众号信息配置
  * APPID:绑定支付的APPID(必须配置)
  * MCHID:商户号(必须配置)
  * KEY:商户支付密钥,参考开户邮件设置(必须配置)
  * APPSECRET:公众帐号secert(仅JSAPI支付的时候需要配置)
  */
  public const string APPID = "你的微信公众号APPID";
  public const string MCHID = "你的微信公众号的商户号";
  public const string KEY = "你的微信公众号的商户支付密钥";
  public const string APPSECRET = "你的微信公众号的APPSECRET";

  //=======【证书路径设置】===================================== 
  /* 证书路径,注意应该填写绝对路径(仅退款、撤销订单时需要)
  */
  public const string SSLCERT_PATH = "cert/apiclient_cert.p12";
  public const string SSLCERT_PASSWORD = "1233410002";



  //=======【支付结果通知url】===================================== 
  /* 支付结果通知回调url,用于商户接收支付结果
  */
  public const string NOTIFY_URL = "http://你的网站/Pay/ResultNotifyPage.aspx";

  //=======【商户系统后台机器IP】===================================== 
  /* 此参数可手动配置也可在程序中自动获取
  */
  public const string IP = "你的服务器IP";


  //=======【代理服务器设置】===================================
  /* 默认IP和端口号分别为0.0.0.0和0,此时不开启代理(如有需要才设置)
  */
  public const string PROXY_URL = "";

  //=======【上报信息配置】===================================
  /* 测速上报等级,0.关闭上报; 1.仅错误时上报; 2.全量上报
  */
  public const int REPORT_LEVENL = 1;

  //=======【日志级别】===================================
  /* 日志等级,0.不输出日志;1.只输出错误信息; 2.输出错误和正常信息; 3.输出错误信息、正常信息和调试信息
  */
  public const int LOG_LEVENL = 0;
 }

</div>

 不使用代理要注释HttpService.cs里面post和get方法的下面代码:
 

//设置代理服务器
    //WebProxy proxy = new WebProxy();       //定义一个网关对象
    //proxy.Address = new Uri(Config.PROXY_URL);    //网关服务器端口:端口
    //request.Proxy = proxy;
</div>

统一下单:

/**
  * 
  * 统一下单
  * @param WxPaydata inputObj 提交给统一下单API的参数
  * @param int timeOut 超时时间
  * @throws WxPayException
  * @return 成功时返回,其他抛异常
  */
  public static WxPayData UnifiedOrder(WxPayData inputObj, int timeOut = 6)
  {
   string url = "https://api.mch.weixin.qq.com/pay/unifiedorder";
   //检测必填参数
   if (!inputObj.IsSet("out_trade_no"))
   {
    throw new WxPayException("缺少统一支付接口必填参数out_trade_no!");
   }
   else if (!inputObj.IsSet("body"))
   {
    throw new WxPayException("缺少统一支付接口必填参数body!");
   }
   else if (!inputObj.IsSet("total_fee"))
   {
    throw new WxPayException("缺少统一支付接口必填参数total_fee!");
   }
   else if (!inputObj.IsSet("trade_type"))
   {
    throw new WxPayException("缺少统一支付接口必填参数trade_type!");
   }

   //关联参数
   if (inputObj.GetValue("trade_type").ToString() == "JSAPI" && !inputObj.IsSet("openid"))
   {
    throw new WxPayException("统一支付接口中,缺少必填参数openid!trade_type为JSAPI时,openid为必填参数!");
   }
   if (inputObj.GetValue("trade_type").ToString() == "NATIVE" && !inputObj.IsSet("product_id"))
   {
    throw new WxPayException("统一支付接口中,缺少必填参数product_id!trade_type为JSAPI时,product_id为必填参数!");
   }

   //异步通知url未设置,则使用配置文件中的url
   if (!inputObj.IsSet("notify_url"))
   {
    inputObj.SetValue("notify_url", Config.NOTIFY_URL);//异步通知url
   }

   inputObj.SetValue("appid", Config.APPID);//公众账号ID
   inputObj.SetValue("mch_id", Config.MCHID);//商户号
   inputObj.SetValue("spbill_create_ip", Config.IP);//终端ip    
   inputObj.SetValue("nonce_str", GenerateNonceStr());//随机字符串

   //签名
   inputObj.SetValue("sign", inputObj.MakeSign());
   string xml = inputObj.ToXml();

   var start = DateTime.Now;

   Log.Debug("WxPayApi", "UnfiedOrder request : " + xml);
   string response = HttpService.Post(xml, url, false, timeOut);
   Log.Debug("WxPayApi", "UnfiedOrder response : " + response);

   var end = DateTime.Now;
   int timeCost = (int)((end - start).TotalMilliseconds);

   WxPayData result = new WxPayData();
   result.FromXml(response);

   ReportCostTime(url, timeCost, result);//测速上报

   return result;
  }

</div>

看我的调用例子:

MakeQRCode.aspx页面照抄:

public partial class Pay_MakeQRCode : System.Web.UI.Page
{
 protected void Page_Load(object sender, EventArgs e)
 {
  if (!string.IsNullOrEmpty(base.Request.QueryString["data"]))
  {
   string str = base.Request.QueryString["data"];
   Bitmap image = new QRCodeEncoder
   {
    QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE,
    QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M,
    QRCodeVersion = 0,
    QRCodeScale = 4
   }.Encode(str, Encoding.Default);
   MemoryStream ms = new MemoryStream();
   image.Save(ms, ImageFormat.Png);
   base.Response.BinaryWrite(ms.GetBuffer());
   base.Response.End();
  }
 }
}
</div>

这个页面是用来生成二维码的,需要引入ThoughtWorks.QRCode.dll组件。

我使用模式二,回调页面是ResultNotifyPage.aspx,就是在配置信息那里填写的那个回调页面。

protected void Page_Load(object sender, EventArgs e)
 {
  ResultNotify resultNotify = new ResultNotify(this);
  WxPayData res = resultNotify.ProcessNotify2();
  if (res.GetValue("return_code") == "SUCCESS")
  {
   //查询微信订单信息
   string paySignKey = ConfigurationManager.AppSettings["paySignKey"].ToString();
   string mch_id = ConfigurationManager.AppSettings["mch_id"].ToString();
   string appId = ConfigurationManager.AppSettings["AppId"].ToString();

   QueryOrder queryorder = new QueryOrder();
   queryorder.appid = appId;
   queryorder.mch_id = mch_id;
   queryorder.transaction_id = res.GetValue("transaction_id").ToString();
   queryorder.out_trade_no = "";
   queryorder.nonce_str = TenpayUtil.getNoncestr();

   TenpayUtil tenpay = new T



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • c#版在pc端发起微信扫码支付的实例

相关文章

  • 2017-05-28c# 解决IIS写Excel的权限问题
  • 2017-05-28winform模拟鼠标按键的具体实现
  • 2017-05-28C#静态static的用法实例分析
  • 2017-05-28基于c#用Socket做一个局域网聊天工具
  • 2017-05-28C#实现的简单验证码识别实例
  • 2017-05-28C#实现获取文本文件的编码的一个类(区分GB2312和UTF8)
  • 2017-05-28C#使用Socket快速判断数据库连接是否正常的方法
  • 2017-05-28C#实现在网页中根据url截图并输出到网页的方法
  • 2017-05-28C#时间戳基本用法实例分析
  • 2017-05-28c# 动态加载dll文件,并实现调用其中的方法(推荐)

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C#中Dynamic和Dictionary性能比较
    • .Net(c#)汉字和Unicode编码互相转换实例
    • 浅谈Java与C#的一些细微差别
    • 深入多线程之:内存栅栏与volatile关键字的使用分析
    • C#远程发送和接收数据流生成图片的方法
    • C#处理datagridview虚拟模式的方法
    • C#中实现在32位、64位系统下自动切换不同的SQLite dll文件
    • 快速解决owin返回json字符串多带了双引号"多了重string转义字符串
    • C#通过DataSet读写xml文件的方法
    • C#百万数据查询出现超时问题的解决方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有