扫码导出客户微信好友列表导出里所有好友微信好友列表导出这样做犯法吗

微信支付怎么弄(微信扫码支付步骤流程)
我的图书馆
微信支付怎么弄(微信扫码支付步骤流程)
  微信扫码支付怎么弄,微信扫码支付是怎么使用的,微信扫码支付二维码是怎么生成的呢?今天我们就来说说微信扫码支付功能是怎么开发的?  微信扫码支付步骤流程  用户扫描商户展示在各种场景的二维码进行支付。  步骤1:商户根据微信支付的规则,为不同商品生成不同的二维码,展示在各种场景,用于用户扫描购买。  步骤2:用户使用微信“扫一扫扫描二维码后,获取商品支付信息,引导用户完成支付。  步骤3:用户确认支付,输入支付密码。  步骤4:支付完成后会提示用户支付成功,商户后台得到支付成功的通知,然后进行发货处理。  微信支付扫码的二维码怎么生成  打开微信,点击右上角 加号 选择收钱,二维码就自动生成了,然后让别人扫你的二维码即可支付。  现在已经运用到排队点餐,商店买东西,参与到生活中的方方面面,已经取代了原生态的现金和刷卡支付这种繁杂过程。
TA的最新馆藏
喜欢该文的人也喜欢微信付款码不要截图给别人,被刷走钱防不胜防啊
PingWest 品玩
[摘要]付款码付款一千人民币以下都是不需要输密码的。一旦动机不良的人获取了你的付款码,就可以通过接入支付宝或者微信支付的商家扫走你的钱。事情是这样的,有个叫小红的做微商,被“客户”骗发送付款码截图,说是这样才能“付款”,于是小红就照做了,结果被分几次刷掉了一千多块钱。你别不信,这可能是真的。我们都知道在微信聊天界面右上角的小加号点开后可以进行收付款,收款码没问题,因为这是别人扫了之后向你付款,而付款码则有一定风险,因为是你向商家付款。欢迎扫码向我付款,哈哈如你所见,收款码藏在聊天界面的右上角,这个二维码是永远不变的,无论你什么时候都可以扫这个二维码向我付钱,并且不用互为好友。而付款码,是你付钱给对方的码,长这个样:不要试图扫这个付款码,我已经做了处理如果你在便利店用微信付款买过东西肯定知道,收银员都会指导你打开付款码,她会用扫码枪直接扫你这个绿码扣款,总体由一个条形码和一个二维码组成,比收款要多一个条形码。你自己从相册里读取一下这个二维码你会得到一串数字,其实商家就是用普通扫码枪读取你的这串被加密的数字,再和应付金额一起传到支付系统提供商的服务器上即可完成付款。和其实你用支付宝的时候也是有这个码的:只不过支付宝这个细节比微信要做得好,当你截屏的时候,会弹出提示,警告你不要把付款二维码截屏发送给他人。这个码为了安全的考虑,每分钟都会更新,扫过一次该付款码便会自动失效。这串数字只要是接入支付宝或是微信支付的商家都可以进行读取并扣款,付款码付款一千人民币以下都是不需要输密码的。一旦动机不良的人获取了你的付款码,就可以通过接入支付宝或者微信支付的商家扫走你的钱。如果你被盗刷也没关系,可以立马向微信或者支付宝进行投诉并提供证据,微信或支付宝便会冻结这部分钱,并对违规商户进行惩罚。但这种情况还是非常之低的,毕竟接入微信、支付宝商家也不容易,而且微信、支付宝都有商家的记录,追款会相对方便。但总有人会利用一些小漏洞来做违法的事情。如果你实在不放心,可以在钱包里设置手势密码(我→钱包→右上角…→支付管理→打开手势密码),这样的话,每次付款都需要验证手势才能成功支付。虽然有时候付款多了一个步骤,但更加安全。很多时候,我们其实一直在安全和便捷上做平衡。对于微信支付码这件事,也是一样。你可以根据自己的情况,选择更安全或者更便利的做法。 扫一扫,关注大粤数码官方微信“潮哥”(yueshuma),了解手机最新报价、参与有奖抽奖等活动!
正文已结束,您可以按alt+4进行评论
相关阅读:
相关搜索:
看过本文的人还看了
热门搜索:
粤府新函[2001]87号 文网文[号 网络视听许可证1904073号 增值电信业务经营许可证:粤B2--
Copyright & 1998 - 2017 Tencent. All Rights Reserved当下软件园 / 汇聚当下最新最酷的软件下载站!
热门搜索:
您的位置:
> 快马微信扫码群发系统 V3.0.2 官方版
快马微信扫码群发系统 V3.0.2 官方版 / 快马微信扫码群发系统
网友评分:10分
  快马微信扫码群发系统是一款针对微信通讯录好友的自动群发软件,全自动推广神器,提前配置好广告内容,手机端扫码后就可以全自动将广告信息自动推送到对方通讯录好友,可选择男女、群,发送间隔,循环次数,可多微信号同时扫码登陆,同时多线程发送,线下门店做活动效果最佳,带来客流效果最好!
【功能特点】
  解决线下门店无法找客户的困扰
  商家可以通过活动的方式让街扫人员,进店消费的客户扫描软件生成的二维码,电脑会自动群发配置的广告、文字、图片等内容到对方通信录好友中,让您的客户自动向客户好友宣传您的活动,坐等客户上门。快马微信群发软件
  让客户帮您找客户
  客户发送的才更可靠,扫码即群发到客户通讯录中,新时代最快的引流方式。如果一个客户微信有300人,30%的人到店=90人,90再扫码群发,再30%到店,90*300*30%=?轰炸一座城,只需要一套微信扫码群发系统!快马微信群发软件
  告别传统发传单式营销
  相较于传统的传单式营销模式,扫描二维码群发消息,在传播速度与传播规模上拥有绝对优势。 例如:传统行模式一天发送300张传单,人工成本高,且发送效果受发送人员素质等诸多因素影响,只能在某一发送人员所在一小片地区传播:而微信扫码人工成本几乎为零,相当与让客户为客户发传单,产生消息裂变效果,且由于微信好友大多为一个城市的不同地区,大大扩大了在该城市中传播规模,同时传播速度瑶瑶领先于传统模式。
软件特别说明
现在当下小编在此给你隆重推荐这款微信下载电脑版软件,有了这款软件,即使你没有安卓也照样可以微信,照样可以像微信迷们一样没事就来摇一摇,说不定你的他或者她就在另一头等着你,赶快行动起来吧,让这款微信电脑客户端在你手里摇起来吧,HIGH起来吧!
陌陌是北京陌陌科技有限公司于2011年8月起推出的一款基于地理位置的移动社交产品,但是您想要在电脑上玩转陌陌吗?现在,您就有这样的机会了,陌陌电脑版强势出击。
YY随缘多开器是一款免费,无毒无插件,支持密码大小写和特殊符号,支持多开,不掉线 ,批量登录的绿色yy多开器。
微信没人聊天?什么!你想与明星聊天,简单,用微信对话生成器,轻松让你模拟与明星的各种对话,自娱自乐,虽然这是假的啦~~~。但是别人不知道啊,你把生成的聊天记录放到朋友圈里,小伙伴们一定都会惊呆啦!
Windows Live Messenger 有关闭今日焦点、隐身登录提示、对方脱机提示、聊天框最近消息记录等优化特性
其他版本下载
快马微信扫码群发系统 V3.0.2 官方版
Copyright (C)
www.downxia.com.All rights reserved.一起代理为您整理的优质微商货源【】优质微商货源
微信扫码群发,无限引流客户源,瞬间使你的广告轰炸全城!
核心提示:互联网圈里,尤其是移动互联网,充斥着各种产品通过网络渠道一夜火爆成名的故事,但是这样的事情并不能发生在每一个产品身上,大
互联网圈里,尤其是移动互联网,充斥着各种产品通过网络渠道一夜火爆成名的故事,但是这样的事情并不能发生在每一个产品身上,大部分的产品还是要通过踏踏实实的推广来获取用户。当然,所有的区域性推广方式中,最心酸的,莫过于地推了。花钱找人发传单,在公交,地铁等做广告牌,搞一场轰轰烈烈的演出吸引客户等方式,这些传统方式都已经过时了,现在区域性的广告推广也走上了互联网+,看微信扫码群发软件如何让你不花一分钱广告投入,达到比以上所有传统推广方式效果还好的神奇软件。面对这些问题,解决办法这一就是让科技来提升地推工作的效率,减轻人力和物力的消耗。微信扫码群发软件便是利用科技来解决这一痛点问题。主要功能就是让我们所有进店的客户只要用微信扫一扫二维码,就可以把我们设置过的宣传内容推送给顾客的每一位微信好友!微信扫码群发软件是一款全自动推广神器,提前配置好广告内容,手机端扫码后就可以全自动将广告信息自动推送到对方通讯录好友,可选择男女、群,发送间隔,循环次数,可多微信号同时扫码登陆,同时多线程发送,线下门店做活动效果最佳,带来客流效果最好!商家可以通过活动的方式让街扫人员,进店消费的客户扫描软件生成的二维码,软件会自动群发配置的广告、文字、图片等内容到对方通信录好友中,让您的客户自动向客户好友宣传您的活动,坐等客户上门。找客户太累,客户介绍客户,这才是真正的客流逆变!无论你是实体店还是网店微商,微信扫码群发软件都是你寻找客户不可或缺的神器。微信扫码群发软件会把信息生成一个二维码,这个二维码就是我们最强大的地方。一场活动开始会组织员工外出扫码。只要拿着微信对着二维码扫一扫,就可以把你设置好的推广内容群发所有好友,我们的软件赠送后台,可以随意设置发送内容,文字图片都可以发送。想像一下,一家餐饮店发布一个扫码领礼品的活动,假设有1个用户扫码领取礼品,而这个用户有500个微信好友,按到店率30%计算,1×500×30%=150人!一个客户就可以给你带150人来,150人再继续扫,你说可以带多少人?更何况还不止一个用户呢?这就是微信扫码群发软件的强大之处。微信扫码群发软件,无限引流客户源,瞬间使你的广告轰炸全城.无论你是健康养生减肥美容健身行业、还是房产培训机构特色餐饮4s店;无论你是线下地推活动推广还是线上雇人推广;无论你是实体店老板还是网商微商老板,微信扫码群发软件都是你不可或缺的推广神器。扫码群发红利期,稍纵即逝点击“我要报名”,即刻报名抢购。
你的朋友圈一天能刷到多少条微信广告?如果是两条,恭喜你,你成为微信标注的一线城市用户了。3月22日下午,据微信相关人士爆料,
发布日期:
  支付宝怎么屏蔽好友的动态?我们在使用支付宝的过程中会添加很多的好友,但是好友如果加的是特别多,当好友有动态的时候支付宝
发布日期:
今天好多人已经感觉到电商遇到了很大的瓶颈,就是流量的瓶颈很严重,单纯的卖货面临越来越严重的同质竞争。在此背景下,出现一个
发布日期:
你是否思考过这样的一个问题,我们每天都在发朋友圈,那么到底有多少人在关注我们呢?又有多少人在看我们的朋友圈呢?我们该如何
发布日期:
如何使用鱼池挖到门罗币? 门罗币当前总市值近300亿美元,是一种较为主流的数字货币。门罗币可通过交易所购买获得,也可以通过挖
发布日期:
前段时间,因为席卷全球的勒索病要求比特币支付,比特币这种虚拟货币又站到了风口浪尖,这期间经历了大涨大跌的行情,这种外人口
发布日期:
数字货币火了,最近各个群都在讨论,到处都是资产翻百倍的传说。我查看好几个群的聊天记录,发现小白非常多,想入币圈,而不得其
发布日期:
区块链是比特币等虚拟货币的最底层的技术手段,通过区块链可以不断的对虚拟货币的模块进行更新,而且还可以对虚拟货币的交易记录
发布日期:
没错,正像标题所讲,比特币挖矿是一个巨大的陷阱,这是我的亲身经历,看到网上论坛上一些瞎扯淡的文章就来气,我想到底事实是如
发布日期:
在四年前的这段时间,最火热的话题恐怕非世界杯莫属。在Google上搜索“世界杯”找到约560,000,000条结果,在报纸上、电视里、电
发布日期:
微商货源 www.17daili.com 国内最早的货源信息网之一,免费发布微商代理项目,微商货源,网店货源. 汇集海量免费微商一件代发货源、网店代理信息。免费为淘宝,网店,微商分销商提供货源信息,获取微商代理项目、微商进货信息,首选的b2b免费微商平台。友情提示:本站货源系用户自行发布,其真实性、合法性由发布人负责,17daili.com不提供任何保证,亦不承担任何法律责任.站长电话: 站长QQ: 站长微信号:zjjqinyang 本站公众微信:YIQIHUOYUAN本站数据统计由
免费提供 版权:湘公网安备 72号微信支付教程系列之扫码支付
& &&& & 今天,我们来一起探讨一下这个微信扫码支付。何为扫码支付呢?这里面,扫的码就是二维码了,就是我们经常扫一扫的那种二维码图片,例如,我们自己添加好友的时候,可以通过输入对方的微信号,也可以扫一扫对方的二维码。扫码支付,作为,微信支付里面,不可或缺的一个功能,对商品的支付提供了极为方便的体验,用途也非常的多。例如我们在地铁、公交站常见的那些自动售货机(不错,就是那种投硬币,就可以自动出货的那种机器)中都用到。以前,那种机器,只能通过投硬币或者纸币,但是,这里面也有一定的风险,例如:假币,盗窃(真有人把机器砸了,把机器里面的钱偷走的),所以,微信(支付宝)的扫码支付的出现,大大的减少了这方面的风险,近些年来,二维码的应用越来越广,甚至有些地方,直接用来自动售票(就是把起始点设定好,票价设定好,直接把二维码贴出来,让乘客自动扫相关的二维码,完成购票,上车的时候,只需要提供自己的支付凭证给乘车员验证即可),这样,不仅绿色环保了,还大大的提高了售票的速度(去过大车站购票的人应该深有体验,排队买个票,好歹半个小时以上,心里也是万头草泥马在奔腾的)。
& &&& & 咱就不扯远了,说回咱么今天要做的微信支付之扫码支付。微信官方的文档,这个扫码支付(NativePay)分为两种,一种是&生成扫描支付模式&,另外一种是&生成直接支付url,支付url有效期为2小时&,至于这里面,两种扫码模式,怎么灵活利用呢,官方也没有一个明确的说明。个人理解为,第一种(生成扫描支付模式),适用于固定二维码的,就是永久使用的那种,例如一些商家的公众号的二维码,是永久的,什么时候扫,都是关注这个公众号的,但是,这种的话,我记得微信是有限量的,貌似是一个公众号,限量10w,个人观点,觉得这个限量,是足够我们使用的。第二种(生成直接支付url,支付url有效期为2小时),这种的话,因为有有效期这种时间限制,超过了2个小时,该二维码就失效,但是对生成的二维码数量没有限制,所以,这种个人观点觉得适用于那种临时根据实际情况生成的二维码,例如:公众平台登陆的时候二次验证的二维码,自定义生成,仅为一次性缴费使用的二维码,等等)。接下来,我们就开始讲讲实际例子,首先将的就是第一种模式。
& &&& & 扫码支付之模式一(生成扫描支付模式):
& &&& & 首先,我们新建一个&MVC&的项目(asp.net的官方的demo就是了,要asp.net的自己看demo吧,demo地址:),然后把系统自动生成的HomeControler和View中的Home都删了。
& &&& & 然后自己新建一个HomeControler,代码如下:
// GET: Home
public ActionResult Index()
return View();
& &&& &&& & 再添加一个View,代码如下:
&!DOCTYPE html&
&meta name="viewport" content="width=device-width" /&
&title&首页&/title&
接下来,我们先把官方的demo的一些我们会用到的东西拷贝过来,其中包括以下几个文件夹,如下图:
就这个lib和business两个,把这两个文件夹,支付复制到咱们的新项目中,并且包含在项目中,如下:
然后我们再&重新生成&以下项目,或者快捷键:ctrl+shift+b,这时候,会提下如下错误:
这时候,我们去添加引用,把lib文件夹中的LitJson.dll 添加上即可,如下图:
到这里,我们就基本把官方的demo的环境给搭建好了,接下来,我们就要开始编写代码了。
& & & & 首先,我的逻辑是,从前到后,就是从前端到后端。前端是显示二维码的地方,那么我们就先给他一个div(本文使用到的是jquery的二维码生成插件,全名叫:jquery.qrcode.min.js,我会传到附件上),然后在页面加载完毕的时候,会请求后台,让他返回二维码字符串,然后再通过jquery的二维码生成插件,让他生成二维码并显示在前台,代码如下:
&!DOCTYPE html&
&meta name="viewport" content="width=device-width" /&
&title&首页&/title&
&link href="~/Scripts/jquery-easyui-1.4.5/themes/bootstrap/easyui.css" rel="stylesheet" /&
&link href="~/Scripts/jquery-easyui-1.4.5/themes/mobile.css" rel="stylesheet" /&
&link href="~/Scripts/jquery-easyui-1.4.5/themes/icon.css" rel="stylesheet" /&
模式一:生成扫描支付模式
&div id="QRCode1"&
模式二:生成直接支付url,支付url有效期为2小时
&div id="QRCode2"&
&script src="~/Scripts/jquery-1.10.2.js"&&/script&
&script src="~/Scripts/jquery-easyui-1.4.5/jquery.easyui.min.js"&&/script&
&script src="~/Scripts/jquery-easyui-1.4.5/jquery.easyui.mobile.js"&&/script&
&script src="~/Scripts/jquery-easyui-1.4.5/easyloader.js"&&/script&
&script src="~/Scripts/jquery.qrcode.min.js"&&/script&
&script type="text/javascript"&
$(function () {
fGetQRCode1();
function fGetQRCode1() {
$.messager.progress({
title: "",
msg: "正在生成二维码:模式一,请稍后..."
type: "post",
url: "/Home/GetQRCode1",
time: new Date(),
productId:7788
success: function (json) {
$.messager.progress('close');//记得关闭
if (json.result) {
$('#QRCode1').qrcode(json.str); //生成二维码
$('#QRCode1').html("二维码生成失败");
using System.Collections.G
using System.L
using System.W
using System.Web.M
using WxPayAPI;
namespace WxPay.Controllers
public class HomeController : Controller
// GET: Home
public ActionResult Index()
return View();
/// &summary&
/// 模式一
/// &/summary&
/// &returns&&/returns&
[HttpPost]
public ActionResult GetQRCode1()
object objResult = "";
string strProductID = Request.Form["productId"];
string strQRCodeStr = GetPrePayUrl(strProductID);
if (!string.IsNullOrWhiteSpace(strProductID))
objResult = new { result = true, str = strQRCodeStr };
objResult = new { result = false };
return Json(objResult);
* 生成扫描支付模式一URL
* @param productId 商品ID
* @return 模式一URL
public string GetPrePayUrl(string productId)
WxPayData data = new WxPayData();
data.SetValue("appid", WxPayConfig.APPID);//公众帐号id
data.SetValue("mch_id", WxPayConfig.MCHID);//商户号
data.SetValue("time_stamp", WxPayApi.GenerateTimeStamp());//时间戳
data.SetValue("nonce_str", WxPayApi.GenerateNonceStr());//随机字符串
data.SetValue("product_id", productId);//商品ID
data.SetValue("sign", data.MakeSign());//签名
string str = ToUrlParams(data.GetValues());//转换为URL串
string url = "weixin://wxpay/bizpayurl?" +
* 参数数组转换为url格式
* @param map 参数名与参数值的映射表
* @return URL字符串
private string ToUrlParams(SortedDictionary&string, object& map)
string buff = "";
foreach (KeyValuePair&string, object& pair in map)
buff += pair.Key + "=" + pair.Value + "&";
buff = buff.Trim('&');
这时候,模式一是不是感觉就完成了?那么我们现在试试,我们浏览该页面,如下:
然后用微信扫一扫功能扫一下,发现提示如下:
这是什么鬼,是不是,你心里面是不是想知道为啥,那我来告诉你,这是为啥,这是因为,你还没有设置回调页面或者回调页面有问题,这个时候,我们再新建一个Control,命名为:NativeNotifyController.cs,代码如下:
using System.Collections.G
using System.L
using System.T
using System.W
using System.Web.M
using WxPayAPI;
namespace WxPay.Controllers
public class NativeNotifyController : Controller
// GET: NativeNotify
public ActionResult Index()
string strData = ProcessNotify();
Response.Write(strData);
return View();
public string ProcessNotify()
WxPayData notifyData = GetNotifyData();
//检查openid和product_id是否返回
if (!notifyData.IsSet("openid") || !notifyData.IsSet("product_id"))
WxPayData res = new WxPayData();
res.SetValue("return_code", "FAIL");
res.SetValue("return_msg", "回调数据异常");
return res.ToXml();
//调统一下单接口,获得下单结果
string openid = notifyData.GetValue("openid").ToString();
string product_id = notifyData.GetValue("product_id").ToString();
WxPayData unifiedOrderResult = new WxPayData();
unifiedOrderResult = UnifiedOrder(openid, product_id);
catch (Exception ex)//若在调统一下单接口时抛异常,立即返回结果给微信支付后台
WxPayData res = new WxPayData();
res.SetValue("return_code", "FAIL");
res.SetValue("return_msg", "统一下单失败");
return res.ToXml();
//若下单失败,则立即返回结果给微信支付后台
if (!unifiedOrderResult.IsSet("appid") || !unifiedOrderResult.IsSet("mch_id") || !unifiedOrderResult.IsSet("prepay_id"))
WxPayData res = new WxPayData();
res.SetValue("return_code", "FAIL");
res.SetValue("return_msg", "统一下单失败");
return res.ToXml();
//统一下单成功,则返回成功结果给微信支付后台
WxPayData data = new WxPayData();
data.SetValue("return_code", "SUCCESS");
data.SetValue("return_msg", "OK");
data.SetValue("appid", WxPayConfig.APPID);
data.SetValue("mch_id", WxPayConfig.MCHID);
data.SetValue("nonce_str", WxPayApi.GenerateNonceStr());
data.SetValue("prepay_id", unifiedOrderResult.GetValue("prepay_id"));
data.SetValue("result_code", "SUCCESS");
data.SetValue("err_code_des", "OK");
data.SetValue("sign", data.MakeSign());
return data.ToXml();
/// &summary&
/// 接收从微信支付后台发送过来的数据并验证签名
/// &/summary&
/// &returns&微信支付后台返回的数据&/returns&
public WxPayData GetNotifyData()
//接收从微信后台POST过来的数据
System.IO.Stream s = Request.InputS
int count = 0;
byte[] buffer = new byte[1024];
StringBuilder builder = new StringBuilder();
while ((count = s.Read(buffer, 0, 1024)) & 0)
builder.Append(Encoding.UTF8.GetString(buffer, 0, count));
s.Flush();
s.Close();
s.Dispose();
//转换数据格式并验证签名
WxPayData data = new WxPayData();
data.FromXml(builder.ToString());
catch (WxPayException ex)
//若签名错误,则立即返回结果给微信支付后台
WxPayData res = new WxPayData();
res.SetValue("return_code", "FAIL");
res.SetValue("return_msg", ex.Message);
private WxPayData UnifiedOrder(string openId, string productId)
//统一下单
WxPayData req = new WxPayData();
req.SetValue("body", "广东XXXX股份有限公司");
req.SetValue("attach", "附加信息,用于后台或者存入数据库,做自己的判断");
req.SetValue("out_trade_no", WxPayApi.GenerateOutTradeNo());
req.SetValue("total_fee", 1);
req.SetValue("time_start", DateTime.Now.ToString("yyyyMMddHHmmss"));
req.SetValue("time_expire", DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss"));
req.SetValue("goods_tag", "商品的备忘,可以自定义");
req.SetValue("trade_type", "NATIVE");
req.SetValue("openid", openId);
req.SetValue("product_id", productId);
WxPayData result = WxPayApi.UnifiedOrder(req);
记得,也要新建一个View,就是在Index那里,右键添加一个View,View的代码如下(你没眼花,就是空的,不管他):
&!DOCTYPE html&
&meta name="viewport" content="width=device-width" /&
&title&Index&/title&
接着,把这个项目,发布出来,放到服务器的iis上,这里面,我把他发布在上面(必须要发布到网上哈,如果不懂发布的,你可以自己去学习基础知识先了),这还没完,还需要把到公众平台上,设置回调页面,操作如下:
这样,就大功告成了。这时候,我们再试试扫码,发现已经得到以下提示了,这样子,就代表,我们的模式一,已经成功完成了。如下图:
& & & & 这时候,细心的朋友就会提问了,我这都支付成功了,怎么页面没啥提示呀,这页面不交互很不友好啊。嗯,没错,童鞋,你有前途,现在我就告诉你,怎么做交互,但是,为了你日后更加有前途,我只告诉你逻辑,具体怎么实现,自己来想,多动脑。
& & & &那么逻辑是怎么的呢?常规逻辑下,我们微信扫页面上的这个二维码的时候,这个时候,他已经把我们二维码里面的参数,传到微信服务器,然后有他们开始统一下单(如果对逻辑不清晰,可以看看官方的文档:):他们在统一下单的时候,就会生成一个product_id,这个家伙的作用呢 ,就是告诉你现在微信服务器,已经生成了一个单号,劳资已经收到你的支付请求了,赶紧给老子付款,O(&_&)O哈哈~。。。停,停,停。这时候,思路不能继续往下走了。记得,前面有个叫做&统一下单&,那既然有这个步骤,那我们可以利用一下,就是当他统一下单成功的时候,我们可以在页面更新一下状态,告诉客户:您已成功扫描,并下单成功,请支付。是不是,我们可以提示他们这个。然后等用户在手机上,支付成功的时候,这个时候,页面是不是也要反馈给用户,告诉他,小子,你的钱已经到我的口袋了,你可以走了(你走,我没有你这样的宝宝)。O(&_&)O哈哈~,但是,你还要停,停住,停下来。我们服务公司怎么知道这个微信用户已经付款成功了呢?来,我们把视线回到代码上,找到lib/Config.cs,如下图:
然后打开config.cs,找到以下代码:
对了,你很聪明。微信的处理逻辑就是,等用户支付成功之后,他会给这个链接发送支付结果,默认是以前那个aspx的页面,现在我换成mvc,所以,我们得手动新建一个control了,命名为:ResultNotifyController,然后代码如下:
using LmxPublic.L
using System.Collections.G
using System.L
using System.T
using System.W
using System.Web.M
using WxPayAPI;
namespace WxPay.Controllers
public class ResultNotifyController : Controller
// GET: ResultNotify
public ActionResult Index()
string strData = ProcessNotify();
Response.Write(strData);
return View();
public string 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", "支付结果中微信订单号不存在");
return res.ToXml();
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", "订单查询失败");
return res.ToXml();
//查询订单成功
WxPayData res = new WxPayData();
res.SetValue("return_code", "SUCCESS");
res.SetValue("return_msg", "OK");
Log.Info(this.GetType().ToString(), "order query success : " + res.ToXml());
string strXml = res.ToXml();
FileLog.WriteLog(strXml);
return res.ToXml();//如果我们走到这一步了,那就代表,用户已经支付成功了,所以,该干嘛干嘛了。
/// &summary&
/// 接收从微信支付后台发送过来的数据并验证签名
/// &/summary&
/// &returns&微信支付后台返回的数据&/returns&
public WxPayData GetNotifyData()
//接收从微信后台POST过来的数据
System.IO.Stream s = Request.InputS
int count = 0;
byte[] buffer = new byte[1024];
StringBuilder builder = new StringBuilder();
while ((count = s.Read(buffer, 0, 1024)) & 0)
builder.Append(Encoding.UTF8.GetString(buffer, 0, count));
s.Flush();
s.Close();
s.Dispose();
Log.Info(this.GetType().ToString(), "Receive data from WeChat : " + builder.ToString());
//转换数据格式并验证签名
WxPayData data = new WxPayData();
data.FromXml(builder.ToString());
catch (WxPayException ex)
//若签名错误,则立即返回结果给微信支付后台
WxPayData res = new WxPayData();
res.SetValue("return_code", "FAIL");
res.SetValue("return_msg", ex.Message);
Log.Error(this.GetType().ToString(), "Sign check error : " + res.ToXml());
//查询订单
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;
return false;
前台,对,也是要新建一个View,代码如下(没错,也是空的)
&!DOCTYPE html&
&meta name="viewport" content="width=device-width" /&
&title&Index&/title&
好,模式一就到这里了,呼呼。。。没想到啊,一个模式一,让我从上午写到下午,真心累。。。还有一个模式二呢。。。喝口水先,咱,接着来。
好,喝完水,接着干,下面是模式二:
模式二(生成直接支付url,支付url有效期为2小时)
由于有了上面模式一的详细说明,模式二,我就简单一点的来说了,如果又不懂的,到群里来问我吧。
模式二,前端,增加一些代码,如下(完整的,包括模式一的代码了):
&!DOCTYPE html&
&meta name="viewport" content="width=device-width" /&
&title&首页&/title&
&link href="~/Scripts/jquery-easyui-1.4.5/themes/bootstrap/easyui.css" rel="stylesheet" /&
&link href="~/Scripts/jquery-easyui-1.4.5/themes/mobile.css" rel="stylesheet" /&
&link href="~/Scripts/jquery-easyui-1.4.5/themes/icon.css" rel="stylesheet" /&
模式一:生成扫描支付模式
&div id="QRCode1"&
模式二:生成直接支付url,支付url有效期为2小时
&div id="QRCode2"&
&script src="~/Scripts/jquery-1.10.2.js"&&/script&
&script src="~/Scripts/jquery-easyui-1.4.5/jquery.easyui.min.js"&&/script&
&script src="~/Scripts/jquery-easyui-1.4.5/jquery.easyui.mobile.js"&&/script&
&script src="~/Scripts/jquery-easyui-1.4.5/easyloader.js"&&/script&
&script src="~/Scripts/jquery.qrcode.min.js"&&/script&
&script type="text/javascript"&
$(function () {
fGetQRCode1();
function fGetQRCode1() {
$.messager.progress({
title: "",
msg: "正在生成二维码:模式一,请稍后..."
type: "post",
url: "/Home/GetQRCode1",
time: new Date(),
productId:7788
success: function (json) {
$.messager.progress('close');//记得关闭
if (json.result) {
$('#QRCode1').qrcode(json.str); //生成二维码
$('#QRCode1').html("二维码生成失败");
fGetQRCode2();
error: function (json) {
$('#QRCode1').html("二维码生成失败");
fGetQRCode2();
function fGetQRCode2() {
$.messager.progress({
title: "",
msg: "正在生成二维码:模式二,请稍后..."
type: "post",
url: "/Home/GetQRCode2",
time: new Date(),
productId: 7788
success: function (json) {
$.messager.progress('close');//记得关闭
if (json.result) {
$('#QRCode2').qrcode(json.str); //生成二维码
$('#QRCode2').html("二维码生成失败");
error: function (json) {
$('#QRCode2').html("二维码生成失败");
using System.Collections.G
using System.L
using System.W
using System.Web.M
using WxPayAPI;
namespace WxPay.Controllers
public class HomeController : Controller
// GET: Home
public ActionResult Index()
return View();
/// &summary&
/// 模式一
/// &/summary&
/// &returns&&/returns&
[HttpPost]
public ActionResult GetQRCode1()
object objResult = "";
string strProductID = Request.Form["productId"];
string strQRCodeStr = GetPrePayUrl(strProductID);
if (!string.IsNullOrWhiteSpace(strProductID))
objResult = new { result = true, str = strQRCodeStr };
objResult = new { result = false };
return Json(objResult);
/// &summary&
/// 模式二
/// &/summary&
/// &returns&&/returns&
[HttpPost]
public ActionResult GetQRCode2()
object objResult = "";
string strProductID = Request.Form["productId"];
string strQRCodeStr = GetPayUrl(strProductID);
if (!string.IsNullOrWhiteSpace(strProductID))
objResult = new { result = true, str = strQRCodeStr };
objResult = new { result = false };
return Json(objResult);
* 生成扫描支付模式一URL
* @param productId 商品ID
* @return 模式一URL
public string GetPrePayUrl(string productId)
WxPayData data = new WxPayData();
data.SetValue("appid", WxPayConfig.APPID);//公众帐号id
data.SetValue("mch_id", WxPayConfig.MCHID);//商户号
data.SetValue("time_stamp", WxPayApi.GenerateTimeStamp());//时间戳
data.SetValue("nonce_str", WxPayApi.GenerateNonceStr());//随机字符串
data.SetValue("product_id", productId);//商品ID
data.SetValue("sign", data.MakeSign());//签名
string str = ToUrlParams(data.GetValues());//转换为URL串
string url = "weixin://wxpay/bizpayurl?" +
* 参数数组转换为url格式
* @param map 参数名与参数值的映射表
* @return URL字符串
private string ToUrlParams(SortedDictionary&string, object& map)
string buff = "";
foreach (KeyValuePair&string, object& pair in map)
buff += pair.Key + "=" + pair.Value + "&";
buff = buff.Trim('&');
* 生成直接支付url,支付url有效期为2小时,模式二
* @param productId 商品ID
* @return 模式二URL
public string GetPayUrl(string productId)
WxPayData data = new WxPayData();
data.SetValue("body", "广东XXXX股份有限公司");//商品描述
data.SetValue("attach", "附加信息,用于后台或者存入数据库,做自己的判断");//附加数据
data.SetValue("out_trade_no", WxPayApi.GenerateOutTradeNo());//随机字符串
data.SetValue("total_fee", 1);//总金额
data.SetValue("time_start", DateTime.Now.ToString("yyyyMMddHHmmss"));//交易起始时间
data.SetValue("time_expire", DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss"));//交易结束时间
data.SetValue("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();//获得统一下单接口返回的二维码链接
&特此更正,感谢&&&的指出,模式二也是有回调的,回调的接口设置在Config.cs,中,如下图:
所以下面的作废,但是如果需要手动查询订单情况的,还可以用下列的方法查询。再次感谢园友:&&&。
由于模式二是没有支付结果回调的,所以,我们要查询支付成功与否,需要自己写方法来查询,官方提供的查询支付成功与否的方法有以下,
* 订单查询完整业务流程逻辑
* @param transaction_id 微信订单号(优先使用)
* @param out_trade_no 商户订单号
* @return 订单查询结果(xml格式)
public static string Run(string transaction_id, string out_trade_no)
Log.Info("OrderQuery", "OrderQuery is processing...");
WxPayData data = new WxPayData();
if(!string.IsNullOrEmpty(transaction_id))//如果微信订单号存在,则以微信订单号为准
data.SetValue("transaction_id", transaction_id);
else//微信订单号不存在,才根据商户订单号去查单
data.SetValue("out_trade_no", out_trade_no);
WxPayData result = WxPayApi.OrderQuery(data);//提交订单查询请求给API,接收返回数据
Log.Info("OrderQuery", "OrderQuery process complete, result : " + result.ToXml());
return result.ToPrintStr();
可以通过这个微信订单号(transaction_id)来查询,也可以通过商户订单号(out_trade_no),所以,我们要合理利用这里面的技巧,上述模式二,我用的
out_trade_no 是一个随机字符串,我们可以把这个字符串记录好,放数据库还是放哪里,你自己喜欢,然后写一个ajsx长轮询来,定时查询这个商户订单号,看看有没有支付成功,来做支付确认。
到这里,就大功告成啦,接下来的东西,就由大家自己去展开拓展了,本次经验分享到此结束,如果觉得写得不错,或者对你有帮助,请点&好文要顶&或者&关注我&,顺带也可以评论一两句,大家互相交流交流,转载请保留原作者地址以及姓名。
需要实时测试的,可以关注公众号,测试相关功能(根据实际情况,可能会不定时更新程序,如果需要最新程序的,可以加群联系,QQ群号在上面):
系列推荐:&
我新建一个QQ群,如果有问题,可以在群里提。如果合适,也会根据大家提的比较多的问题,来写篇博文,帮助更多的人,群号:
点击链接加入群【.Net,MVC,EasyUI,MUI,Html,JS】:
(如果有私活,或者一起合作的,也可以私信找我呀,嘿嘿);
作者:南宫萧尘 &
鉴于网页篇幅较小,有些代码,我修改过后,有可能会漏贴到博文上,所以,为了让错误减值最少,我把代码包上传到QQ群了。
如果园友在开发过程中,又发现问题,可以到群里来下载相关的代码来校对,造成不便,请谅解。
阅读(...) 评论()

我要回帖

更多关于 如何导出好友微信号 的文章

 

随机推荐