扫码支付,支付宝扫码付款款后自动加为好友,怎么设置

紧急提醒!扫码支付新骗局来了,爱用手机支付的人一定要看!
广告:以下产品均为招商信息不零售
(备注:请单次点击图片长按识别二维码)
来源微信公众号:今日爆料支付网()
现在的移动支付越来越便利啦,
不用带现金出门,
只要用手机扫一扫就可以解决所有问题。
比如你出门逛街买单时,
吃饭买单扫一扫:
出门坐公交时,
依然可以扫一扫:
真的炒鸡方便有木有?
但是问题来了,
如果你走在路上突然感觉口渴,
刚好路边有自动售货机,
还可以扫码直接支付,
然后毫不犹豫扫码直接支付......
等...等等...等一下!
为什么手机被扣了款,
饮料还没有粗来???
广告:以下产品均为招商信息不零售
(备注:请单次点击图片长按识别二维码)
骚瑞,你被骗了!
这是怎么肥4?
小伙伴们要注意了,
扫码支付时需留心!
有人中招被骗!
扫了码不出货,怎么回事?
近日,武汉警方接到了一名女士报警:在饮品售货机上买水,看到机身显眼处贴着一个二维码,通过手机扫码支付了6.5元,但等了半天,选择的饮品都没有出货。她随即联系客服,方才知道上了当。
据警方介绍,这样的假二维付款码主要出现在客流大站。付款码多是覆盖原二维码或者粘贴在显眼的位置。嫌疑人很执着,二维码被清理后,隔不了多久又会被重新贴上。
于是民警们清理了地铁站里的所有假二维码。判断男子肯定还会继续来到地铁站贴码,随即加强了布控。
果然,嫌疑人现身了!21日下午,便衣民警在武汉中山公园地铁站巡逻时,发现了一名嫌疑男子,当他掏出随身携带的二维码在自动售货机上粘贴时,被当场抓获,从他的身上还搜出了10多张崭新、尚未粘贴的二维码!
真是日了dog了!
现在骗子的手段层出不穷,
虽然只是几块钱,
但这种行为实在可恶,
遇到一定要举报!
广告:以下产品均为招商信息不零售
(备注:请单次点击图片长按识别二维码)
这些自制的二维码虽然做工粗糙,但与大家日常所见的付款码极为相似,且标注了“便民服务唯一付款码”、“请选择商品,再根据商品金额支付”等迷惑字样,令人难以分辨。
这些二维码千万别乱扫
现在大家都喜欢“扫一扫”,
一些不法分子正是利用这一点偷走你的钱!
类似的“二维码陷阱”频频发生!
下面这些情况大家要留心了!
1、利益诱惑型
商场超市经常有扫二维码送礼品的活动,
实际上,这是对某些产品的推广。
扫码后还需填写个人身份信息等,
这种扫码方式就有可能导致个人隐私泄露。&
2、拉粉求支持型
这种骗术常见于公交站等地方,
骗子往往会主动请路人帮忙扫码,
理由多为“初创企业、做活动”。
这些二维码可能带有病毒,
一旦扫描并安装,
钱财存在被盗刷的风险。
3、缴交罚单型
前段时间,还出现过一种新骗局,
骗子伪造交管部门的“违法停车告知单”,
上面有二维码,让车主扫一扫后“交罚款”,
以此骗取钱财。
警方表示,
缴纳交通罚款,应再三核对,
如果不确定真假,应到自助终端,
以及其他一些合法的网络平台缴纳
提示:央行支付罚单不断,网联正式运营,银联发文谴责,支付结算违规行为举报奖励办法,客户备付金集中存管,国税公告支付手续费要开始纳税等一系列措施,足以说明央行发力,持续稳步发展健康支付市场!距离正规还有多远?全面正规起来支付公司还能挺多久?维持现状的你赶紧醒醒吧!
易融之家App:
广告:以下产品均为招商信息不零售
(备注:请单次点击图片长按识别二维码)
完美分割线
想要了解更多的支付、金融行业资讯信息
那就一定要关注我们的微信公众号
点击以下蓝色关键词查看更多推荐阅读
阅读原文:http://mp./s?timestamp=&src=3&ver=1&signature=ZodDZt7kr277mWrjsFNHybuXv9tktD*NQcbe05Q8CHUiIwuq2ivWI3iVdNdJHo6S6H*1cuZ6eueCWkk91KHzF0b4FJFu4EDuVBOrvy*ptysYQ-fUE1*6e4-7RDT29FzsdKhg*pkvGCy4ctBCB3-4zb7rAYiYHyfSyU1SN499I64=&devicetype=Windows-QQBrowser&version=&pass_ticket=qMx7ntinAtmqhVn+C23mCuwc9ZRyUp20kIusGgbFLi0=&uin=MTc1MDA1NjU1&ascene=1
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。微信扫码付款后怎么添加对方_百度知道
微信扫码付款后怎么添加对方
我有更好的答案
如果当面不添加好友,过后是没办法添加好友的,微信的交易记录不会显示任何个人信息
是不是碰见喜欢的妹子了,嘿嘿。
为您推荐:
其他类似问题
您可能关注的内容
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。扫码收款后的语音报数怎样设置?-飘落de方哥的回答-悟空问答
悟空问答App全新上线 看热点讨论 问明星专家
扫码收款后的语音报数怎样设置?
说两种吧,支付宝和微信的:支付宝设置方式:已经注册的用户之间登陆,进入支付宝首页在“我的”个人中心-点开“设置”打开设置,选择通用打开“二维码收钱到账语音提醒”,打开之后,有人通过扫码付款,就会有支付宝到账的声音提示;为了方便用户,也可以将二维码添加到桌面,在设置 - 快捷方式设置选择添加到桌面;添加之后,桌面就有显示,用户支付时,点开扫码即可;微信的提示方式:打开微信,进入“我”并打开钱包。打开“钱包”后继续打开“收付款”。在“收付款”页点击二维码收款。点击“二维码收款”旁的三个小点,会在手机下方弹出“开启收款提示音”。点击即可开启语音提示。如果已开启语音提示按照以上操作可关闭语音提示。
现如今微信付款已经成为一种全新的消费方式,好多商家也是开通了微信收款服务,不过对于中小型商家来说,可能会因为人手不足或者其他特殊原因而导致无法及时确认到账金额,造成了经济上的损失,所以今天小编就特地来为大家分享一下微信收款语音播报设置方法。一、首先,需要将微信升级到最新版本;安卓用户需要将微信升级至6.5.10版本;iOS版用户需要将其升级至6.5.11以上版本。二、打开微信进入到我的选项卡,找到【钱包】---进入钱包页面看到【收付款】;或者,打开手机微信,点击右上角的+号,选择:收付款,然后,选择:二维码收款。三、进入到收付款页面之后,可以在下方找到【二维码收款】选项,最后点击一下右上角的【...】即可调出开启:收款到账语音提醒的功能;安卓用户:点击个人收款码 - 右上角菜单按钮 - 开启收款到账语音提醒ios用户通过「二维码收款到账通知」的消息或从收款码底部进入「收款账单」,最上方处开启当开启这个功能之后,一旦通过二维码收款到账微信就会自动播报“微信支付收款到账XX元”,这类似于支付宝收钱码语音到账提醒一样的性质。最后需要注意的是,我们要调节手机音量,保证不让手机处于静音状态,同时进入手机系统设置并确认“允许微信通知”开关已打开。iOS用户还需要检查微信》设置》新消息通知,确认“接收新消息通知”开关已经打开。
微信:微信支付现金、收款已经成为了微信除了聊天外最常用的使用场景之一,不过在此前在支付流程上还存在一些问题,例如存在二维码被调换导致商家收不到款项、部分买家借商家忙碌之机随机转账金额造成商家的严重损失,这些功能已经在最新的微信支付当中得到解决。微信官方表示,微信支付在日前开放了“收款码被调换”赔付的通道。同时,为了方便商家确认收款到账状态,微信最新版本也推出“收款到账语音提醒”功能。对于被调包二维码而造成损失的商户,微信支付承诺会进行资金赔付。发现被不法分子偷换收款码后,建议商户先到公安局报案,在微信发起资金赔付申请,我们将对有公安局报案回执的商家优先审核,符合条件将给予赔付。▼具体操作流程为了解决商家无法及时掏出手机查看转账金额的问题,微信新增加了收款到账语音提醒功能,同时也帮助商家实时确认收款码不被调换。打开收款语音提醒开关后,每笔收款后都会播报“微信支付收款到账XX元”,供收款方快速确认收款到账状态。有两种打开方式:开启该功能,需要iOS微信版本升级到6.5.11以上;安卓手机版本升级到6.5.10版本,并调整手机媒体播放音量,并确认“允许微信通知”开关已打开,iOS用户还需要检查微信&设置&新消息通知,确认“接收新消息通知”开关已经打开。支付宝:支付宝收款语音播报设置详细流程:支付宝还提醒到,收钱码是有语音播报功能的,每笔到账都有语音播报,不会被截图骗。打开方式:支付宝点击右上角设置-通用-新消息通知。打开到账提醒即可。
正在为您加载更多做生意怎么用支付宝让别人扫码付款款
全部答案(共1个回答)
亚行尽量别用支付宝付款,万一退票很麻烦,看了亚行的退款问题,基本都是用支付宝付的,他们不能原路返回,建议直接visa付吧
答: 您好,中风在中医上为本虚标实之证,在本为阴阳偏胜,气机逆乱;在标为风火相煽,痰浊壅塞,瘀血内阻.常见的病因有忧思恼怒,饮酒无度,或恣食肥甘,纵欲劳累,或起居不慎...
答: 什么问题啊?
答: 1.5M=0.5M ?没听说过,我就知道我家的2M=230KB,都说很正常,你还打算玩什么样的大型游戏?营业厅的给你说的天花乱坠,你问问给你装宽带的,根本不是那...
大家还关注
确定举报此问题
举报原因(必选):
广告或垃圾信息
激进时政或意识形态话题
不雅词句或人身攻击
侵犯他人隐私
其它违法和不良信息
报告,这不是个问题
报告原因(必选):
这不是个问题
这个问题分类似乎错了
这个不是我熟悉的地区
相关问答:123456789101112131415微信支付教程系列之扫码支付
& & & & /nangong/p/9fa625bfb92aba72704c46ec.html
& &&& & 今天,我们来一起探讨一下这个微信扫码支付。何为扫码支付呢?这里面,扫的码就是二维码了,就是我们经常扫一扫的那种二维码图片,例如,我们自己添加好友的时候,可以通过输入对方的微信号,也可以扫一扫对方的二维码。扫码支付,作为,微信支付里面,不可或缺的一个功能,对商品的支付提供了极为方便的体验,用途也非常的多。例如我们在地铁、公交站常见的那些自动售货机(不错,就是那种投硬币,就可以自动出货的那种机器)中都用到。以前,那种机器,只能通过投硬币或者纸币,但是,这里面也有一定的风险,例如:假币,盗窃(真有人把机器砸了,把机器里面的钱偷走的),所以,微信(支付宝)的扫码支付的出现,大大的减少了这方面的风险,近些年来,二维码的应用越来越广,甚至有些地方,直接用来自动售票(就是把起始点设定好,票价设定好,直接把二维码贴出来,让乘客自动扫相关的二维码,完成购票,上车的时候,只需要提供自己的支付凭证给乘车员验证即可),这样,不仅绿色环保了,还大大的提高了售票的速度(去过大车站购票的人应该深有体验,排队买个票,好歹半个小时以上,心里也是万头草泥马在奔腾的)。
& &&& & 咱就不扯远了,说回咱么今天要做的微信支付之扫码支付。微信官方的文档,这个扫码支付(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");
(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();
(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")
前台,对,也是要新建一个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)
("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,接收返回数据
("OrderQuery", "OrderQuery process complete, result : " + result.ToXml());
return result.ToPrintStr();
可以通过这个微信订单号(transaction_id)来查询,也可以通过商户订单号(out_trade_no),所以,我们要合理利用这里面的技巧,上述模式二,我用的
out_trade_no 是一个随机字符串,我们可以把这个字符串记录好,放数据库还是放哪里,你自己喜欢,然后写一个ajsx长轮询来,定时查询这个商户订单号,看看有没有支付成功,来做支付确认。
到这里,就大功告成啦,接下来的东西,就由大家自己去展开拓展了,本次经验分享到此结束,如果觉得写得不错,或者对你有帮助,请点“好文要顶”或者“关注我”,顺带也可以评论一两句,大家互相交流交流,转载请保留原作者地址以及姓名。
需要实时测试的,可以关注公众号,测试相关功能(根据实际情况,可能会不定时更新程序,如果需要最新程序的,可以加群联系,QQ群号在上面):
阅读(...) 评论()

我要回帖

更多关于 支付宝如何扫码付款 的文章

 

随机推荐