第一步:获取AppID AppSecret(去微信公众平台申请网址https://mp.weixin.qq.com/)
第二步:下载微信支付demo WxPayAPI,其中两个包business,lib,添加到项目中。
第三步:lib包中的有一个类文件config.cs有几个基础参数的要设置,这几个appid,mchid,key,APPSECRET,是在你申请通过微信支付接口后获取的。代码贴上来

using System;
using System.Collections.Generic;
using System.Web;
using WxPayAPI;
namespace WxPayAPI
{/***   配置账号信息*/public class WxPayConfig{//=======【基本信息设置】=====================================/* 微信公众号信息配置* APPID:绑定支付的APPID(必须配置)* MCHID:商户号(必须配置)* KEY:商户支付密钥,参考开户邮件设置(必须配置)* APPSECRET:公众帐号secert(仅JSAPI支付的时候需要配置)*/public const string APPID = "yourAPPID";public const string MCHID = "yourMCHID";public const string KEY = "yourKEY";public const string APPSECRET = "yourAPPSECRET";//操作密码:$$$csq5138553//=======【证书路径设置】===================================== /* 证书路径,注意应该填写绝对路径(仅退款、撤销订单时需要)*/public const string SSLCERT_PATH = "cert/apiclient_cert.p12";public const string SSLCERT_PASSWORD = "1504105221";//=======【支付结果通知url】===================================== /* 支付结果通知回调url,用于商户接收支付结果*/public const string NOTIFY_URL = "你的回调url的地址用来接收支付完成后的操作";//=======【商户系统后台机器IP】===================================== /* 此参数可手动配置也可在程序中自动获取*/public const string IP = "8.8.8.8";//=======【代理服务器设置】===================================/* 默认IP和端口号分别为0.0.0.0和0,此时不开启代理(如有需要才设置)*/public const string PROXY_URL = "http://10.152.18.220:8080";//=======【上报信息配置】===================================/* 测速上报等级,0.关闭上报; 1.仅错误时上报; 2.全量上报*/public const int REPORT_LEVENL = 1;//=======【日志级别】===================================/* 日志等级,0.不输出日志;1.只输出错误信息; 2.输出错误和正常信息; 3.输出错误信息、正常信息和调试信息*/public const int LOG_LEVENL = 0;}
}

第四步:获取微信扫码支付二维码

前台<!-- payment 支付方式选择 --><div class="payment"><!-- 微信支付 --><div class="pay-weixin"><div class="p-w-hd">微信支付</div><div class="p-w-bd" style="position:relative"><div class="j_weixinInfo" style="position:absolute; top: -36px; left: 130px;"></div><div class="p-w-box"><div class="pw-box-hd"><asp:Image ID="Image2" runat="server" style="width:298px;height:298px;"/><div id="ly" class="pw-box-hd" style="position:absolute; top:0; left:130px; z-index:2;background:#f5f5f5; filter:alpha(opacity=70); opacity:0.7;display: none;"> </div></div><div class="pw-retry j_weixiRetry" style="display: none;"><a class="ui-button ui-button-gray j_weixiRetryButton" href="javascript:getWeixinImage2();">获取失败 点击重新获取二维码  </a></div><div class="pw-box-ft"><p>请使用微信扫一扫</p><p>扫描二维码支付</p></div></div><div class="p-w-sidebar"><%--<img src="data:images/logo/20180515161457.png" />--%></div></div></div><!-- 微信支付 end --><!-- payment-change 变更支付方式 --><div class="payment-change"><a class="pc-wrap" onclick="window.history.go(-1)"><i class="pc-w-arrow-left">&lt;</i><strong>选择其他支付方式</strong></a></div><!-- payment-change 变更支付方式 end --></div><!-- payment 支付方式选择 end -->后台:string ordersId = Request.QueryString["ordersId"];Handler handler = new Handler();string sumMoney = handler.GetSumMoneyByOrderId(ordersId);if (!String.IsNullOrEmpty(sumMoney)){this.Label1.Text = ordersId;this.Label2.Text = sumMoney;this.hidOrderId.Value = ordersId;sumMoney = sumMoney + "00";string text = "食色者-订单编号" + ordersId;Log.Info(this.GetType().ToString(), "page load");NativePay nativePay = new NativePay();//生成扫码支付模式一url//string url1 = nativePay.GetPrePayUrl("123456789");//生成扫码支付模式二urltry{string url2 = nativePay.GetPayUrl(ordersId, text, sumMoney);//将url生成二维码图片Image2.ImageUrl = "MakeQRCode.aspx?data=" + HttpUtility.UrlEncode(url2);}catch{Response.Redirect("Reminder-zfError.html");}}else{Response.Redirect("Reminder-zfError.html");}

第五步:回调url地址里的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using WxPayAPI;public partial class PaymentCallback_ResultNotifyPage : System.Web.UI.Page
{protected void Page_Load(object sender, EventArgs e){ResultNotify resultNotify = new ResultNotify(this);resultNotify.ProcessNotify();}
}

第六步:business文件夹里有一个叫ResultNotify.cs的文件里获取支付结果:

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;namespace WxPayAPI
{/// <summary>/// 支付结果通知回调处理类/// 负责接收微信支付后台发送的支付结果并对订单有效性进行验证,将验证结果反馈给微信支付后台/// </summary>public class ResultNotify:Notify{public ResultNotify(Page page):base(page){}public override void ProcessNotify(){WxPayData notifyData = GetNotifyData();//检查支付结果中transaction_id是否存在if (!notifyData.IsSet("transaction_id")){//若transaction_id不存在,则立即返回结果给微信支付后台WxPayData res = new WxPayData();res.SetValue("return_code", "FAIL");res.SetValue("return_msg", "支付结果中微信订单号不存在");Log.Error(this.GetType().ToString(), "The Pay result is error : " + res.ToXml());page.Response.Write(res.ToXml());page.Response.End();}string transaction_id = notifyData.GetValue("transaction_id").ToString();//查询订单,判断订单真实性if (!QueryOrder(transaction_id)){//若订单查询失败,则立即返回结果给微信支付后台WxPayData res = new WxPayData();res.SetValue("return_code", "FAIL");res.SetValue("return_msg", "订单查询失败");Log.Error(this.GetType().ToString(), "Order query failure : " + res.ToXml());page.Response.Write(res.ToXml());page.Response.End();}//查询订单成功else{//到这里说明已经支付成功了,然后调用数据库把这条订单改为已经支付。WxPayData res = new WxPayData();res.SetValue("return_code", "SUCCESS");res.SetValue("return_msg", "OK");Log.Info(this.GetType().ToString(), "order query success : " + res.ToXml());page.Response.Write(res.ToXml());page.Response.End();}}//查询订单private bool QueryOrder(string transaction_id){WxPayData req = new WxPayData();req.SetValue("transaction_id", transaction_id);WxPayData res = WxPayApi.OrderQuery(req);if (res.GetValue("return_code").ToString() == "SUCCESS" &&res.GetValue("result_code").ToString() == "SUCCESS"){return true;}else{return false;}}}
}

到这里所有扫码支付就完成了。我是在支付完成后,在扫码支付页面也就是第四步获取扫码支付二维码的那个页面,做了一个ajax不间断3秒调用数据库,如果数据库已经支付了,就直接跳转到支付成功提示页面。

<script type="text/JavaScript">var timeer;$(document).ready(function () {if ($("#hidOrderId").val() != '') {//alert("调用ajax");timeer = setInterval("GetStatus()", 3000);}});function GetStatus() {var orderId = $("#hidOrderId").val();$.ajax({url: "yourajaxpage.html",type: "post",dataType: "json",data: {method: "yourmethod",orderId: orderId},success: function (data) {if (data.status == '1') {window.location.href = "zfOk-" + orderId + ".html"; //页面跳转}else{window.location.href = "zfError.html"; //页面跳转}}});}</script>

以上代码就可以实现微信扫码登录
演示网址(https://www.shisezhe.com/shoppingCart.html,点击里面的微信支付就可以到微信扫码支付页面,如果有不明白的可以评论

C#实现微信扫码支付相关推荐

  1. c#版在pc端发起微信扫码支付

    c#版在pc端发起微信扫码支付 参考此连接(https://www.cnblogs.com/vinsonLu/p/5166214.html#!comments) posted on 2019-01-0 ...

  2. 微信扫码支付模式二【无法回调】解决方案

    微信扫码支付模式二[无法回调]解决方案 参考文章: (1)微信扫码支付模式二[无法回调]解决方案 (2)https://www.cnblogs.com/lhat/p/5611242.html 备忘一下 ...

  3. 微信扫码支付官方配置(一)

    微信扫码支付官方API: https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_1 .net C# SDK: https://pay. ...

  4. ASP.NET Core Web 支付功能接入 微信-扫码支付篇

    // 随着版本更迭,新版本可能无法完全适用,请参考仓库内的示例. 这篇文章将介绍ASP.NET Core中使用 开源项目 Payment(https://github.com/Essensoft/Pa ...

  5. 微擎支付返回商户单号_一步一步教你在SpringBoot中集成微信扫码支付

    一:准备工作 使用微信支付需要先开通服务号,然后还要开通微信支付,最后还要配置一些开发参数,过程比较多. 申请服务号(企业) 开通微信支付 开发配置 具体准备工作请参考Spring Boot入门教程( ...

  6. 微信支付宝服务器分布,支付宝微信扫码支付中间件「第二届立创商城电子制作节30强作品」...

    原标题:支付宝微信扫码支付中间件「第二届立创商城电子制作节30强作品」 本作品为第二届立创商城电子制作节30强入围作品,作者立创社区ID:云逸Baby:转载请注明出处,未经允许不得用作商业用途.作品原 ...

  7. JAVA微信扫码支付模式二功能实现完整例子

    概述 本例子实现微信扫码支付模式二的支付功能,应用场景是,web网站微信扫码支付.实现从点击付费按钮.到弹出二维码.到用户用手机微信扫码支付.到手机上用户付费成功.web网页再自动调整到支付成功后的页 ...

  8. SpringBoot 2 集成微信扫码支付

    前言 该文主要是手把手教你如何在SpringBoot 中集成微信扫码支付,以及集成的过程需要注意的问题事项.另外需要感谢 vbirdbest 关于微信支付和支付宝支付相关包博客总结.因为文中很多地方参 ...

  9. 微信扫码支付模式二【无法回调】解决方案(转)

    微信扫码支付模式二[无法回调]解决方案(转) 参考文章: (1)微信扫码支付模式二[无法回调]解决方案(转) (2)https://www.cnblogs.com/kenshinobiy/p/8724 ...

  10. 记录新人tp5微信扫码支付

    记录新人tp5微信扫码支付 1.开启商户平台相应的支付(最好填入回调地址,你的地址是可以直接访问的),下载sdk置于继承文件夹类比如tp5的extend 2.config文件中写入相应的参数,自己的或 ...

最新文章

  1. Lowbit Sum 规律
  2. 算法-------LIS算法(Java版本)
  3. java agv,Java 访问控制关键字
  4. 创建Goldengate例外句丙记录跟踪Oracle错误
  5. Spring整合Hibernate。。。。
  6. mc服务器玩家无限掉线怎么办,服务器频繁掉线 求解
  7. leetcode 18 --- 4sum
  8. ubuntu下载linux内核源码
  9. 应对对日软件开发的危机
  10. 矛与盾的较量──网络***和防火墙详解
  11. java方法重载与返回值类型无关
  12. 怎样用关系代数表达式表示查询要求?求过程
  13. python问卷星微信登录_为什么我还可以继续使用python自动填问卷星?
  14. 解构华为AI技术布局:构建无所不及的智能
  15. vmware服务器虚拟化培训视频教程,目前网上关于vSphere最详细的视频教程 vSphere全套经典培训视频教程 VMware课程超清...
  16. 地图服务平台技术方案
  17. 东方已渐白。一枕清欢更待何人说
  18. 做一个自由职业者是一种怎样的体验?
  19. 解决org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 异常
  20. 单片机c语言快速除法运算,单片机开发厂家之单片机C语言快速精度除法方案

热门文章

  1. 解决新版 Edge 浏览器无法使用 IDM 的问题
  2. 怎样锁定oracle用户名,oracle 锁定用户
  3. 大学生计算机应用大赛广告设计,计算机应用工程系第四届“经纬在线杯”网页广告设计大赛圆满结束...
  4. 解决设置easyUI tabs onSelect事件时提示tabs未定义的方法
  5. oracle总结: INTERVAL DAY TO SECOND, 但却获得 NUMBER
  6. 计算机图形学设计线宽代码,计算机图形学画圆并改变线宽.pdf
  7. Scrapy实践:爬取斗鱼TV主播的头像(重写ImagesPipeline实现图片爬取)
  8. 正则表达式数字匹配规则整理
  9. 珊瑚--shopee平台提现流程
  10. 【Hexo搭建个人博客】:yilia主题配置(二) - 背景图片