微信二维码获取失败支付 提示支付失败是什么意思

微信支付扫码模式二中二维码显示不出来 - ThinkPHP框架
我用微信扫码支付模式二生成二维码在火狐下正常显示,但在谷歌下显示不出来怎么回事,求大神指点这是谷歌下在这个浏览器兼容问题怎么改
ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。在大家热切的期盼中,微信移动支付终于能面见公众。
腾讯挟用户已突破5亿之势,微信携手&同胞兄弟&财付通如火如荼向第三方支付市场进军。为吸引更多的用户,公司在微信支付还未对外公开时,就已经悄悄上线微信支付,(下一节将给大家分享微信支付开发全过程),这节将为大家分享微信支付二维码支付,就是在消费的时候,您只需要拿出手机,通过微信扫一扫,扫描我们前台的二维码,即可完成支付。整个微信二维码支付过程中的体验无法用言语来形容。
言归正卷,既然是微信二维码支付,第一步得先生成二维码,这里我直接使用的是腾讯提供的接口()。有需要微信支付生成二维码源代码的,请在下方留言
生成二维码实例代码:
效果图如下:
将上面的DLL下载下来之后,在项目中添加引用,需要引入以下几个命名空间:
using System.D
using ZXing.R
using (System.IO.MemoryStream mstream = new System.IO.MemoryStream())
&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&& System.Drawing.Image qrcodeImg =
&&&&&&&&&&&&&&&&&&& var writer = new BarcodeWriter
&&&&&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&&&& Format = BarcodeFormat.QR_CODE,
&&&&&&&&&&&&&&&&&&&&&&& Options = new EncodingOptions
&&&&&&&&&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&&&&&&&& Height = Height,
&&&&&&&&&&&&&&&&&&&&&&&&&&& Width = Width,
&&&&&&&&&&&&&&&&&&&&&&&&&&& Margin = 0
&&&&&&&&&&&&&&&&&& &&&&&},
&&&&&&&&&&&&&&&&&&&&&&& Renderer = (IBarcodeRenderer)Activator.CreateInstance(typeof(BitmapRenderer))
&&&&&&&&&&&&&&&&&&& };
&&&&&&&&&&&&&&&&&&& if (chainnID & 0 && list != null && list.Contains(chainnID))//没有权限
&&&&&&&&&&& &&&&&&&&{
&&&&&&&&&&&&&&&&&&&&&&& //开始签名 这里对写入二维码里面的参数进行签名,是为了防止数据被篡改
&&&&&&&&&&&&&&&&&&&&&&& string param = string.Format(&i={0}&t={1}&showwxpaytitle=1&, chainnID, mon.GetDateTimeInt());
String URL = &&;
&&&&&&&&&&&&& &&&&&&&&&&string payUrl = string.Format(&{0}/forward.aspx?{1}&sign={2}&, URL, param, mon.Sign(param)); //支付的地址
//将支付的地址写入二维码中,用户扫二维码之后会跳转到你写入的地址
&&&&&&&&&&&&&&&&&&&&&&& System.Diagnostics.Debug.WriteLine(payUrl);
&&&&&&&&&&&&&&&&&&&&&&& qrcodeImg = writer.Write(payUrl);
&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&&&&&& else
&&&&&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&&&& qrcodeImg = writer.Write(&亲,您已经远离地球了,很危险的?!&);
&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&&&&&& qrcodeImg.Save(mstream, System.Drawing.Imaging.ImageFormat.Bmp);
&&&&&&&&&&&&&&&&&&& Response.ClearContent();
&&&&&&&&&&&&&&&&&&& Response.ContentType = &image/Jpeg&;
&&&&&&&&&&&&&&&&&&& Response.BinaryWrite(mstream.ToArray());
&&&&&&&&&&&&&&&&&&& mstream.Close();
&&&&&&&&&&&&&&&&&&& qrcodeImg.Dispose();
&&&&&&&&&&&&&&& }
支付页面对传递过来的参数进行处理:
& & & & & & & & & & & &&
这个界面将数据处理好之后,将通过微信提供的API(
)调用微信支付输入密码界面:
& & & & &&
支付完成后,微信将回调您的接口,推送交易数据
在notify接口中,处理微信发过来的数据:微信发过来的参数分两部分,一部分是POST中的xml数据,另一部分是从url中传过来的
&//获取回调参数
&&&&&&& NameValueCollection nameValues =
&&&&&&& string sPrivateKey = &2b6Ujngi2gqTRqJKoBP7Z7dWT5xuqgS5Az8iEZKG9&;
&&&&&&& nameValues = Request.Form.Keys.Count & 6 ? Request.Form : Request.QueryS
&&&&&&& Dictionary dicReceive = new Dictionary();
&&&&&&& List lstReceiveKey = new List();
&&&&&&& foreach (string sKey in nameValues.Keys)
&&&&&&&&&&& dicReceive.Add(sKey, Request[sKey]);
解析POST中的参数
获取POST参数的代码
Stream inStream = Request.InputS
&&&& &&&BinaryReader br = new BinaryReader(inStream, System.Text.Encoding.Default);
&&&&&&& byte[] byteData = br.ReadBytes((int)inStream.Length);
&&&&&&& string sXml = Common.ToUrlDecode(Encoding.Default.GetString(byteData));
解析微信支付回调提交过来的数据:
&XmlDocument xmlDoc = new XmlDocument();
&&&&&&&&&&& xmlDoc.LoadXml(sXml );
&&&&&&&&&&& string sOpenID = xmlDoc.SelectSingleNode(&xml/OpenId&).InnerT
&&&&&&&&&&& string sAppID = xmlDoc.SelectSingleNode(&xml/AppId&).InnerT
&&&&&&&&&&& string sIsSubscribe = xmlDoc.SelectSingleNode(&xml/IsSubscribe&).InnerT
&&&&&&&&&&& string sTimeStamp = xmlDoc.SelectSingleNode(&xml/TimeStamp&).InnerT
&&&&&&&&&&& string sNonceStr = xmlDoc.SelectSingleNode(&xml/NonceStr&).InnerT
&&&&&&&&&&& String AppSignature = xmlDoc.SelectSingleNode(&xml/AppSignature&).InnerT
解析之后要进行安全验证,也就是验证签名
//开始验证签名
&&&&&&&&&&& String sToSHA = string.Format(&appid={0}&appkey={1}&issubscribe={5}&noncestr={3}&openid={4}&tamp={2}&, sAppID, sPrivateKey, sTimeStamp, sNonceStr, sOpenID, sIsSubscribe);
&&&&&&&&&&& string sMySign = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sToSHA, &SHA1&).ToLower();
&&&&&&&&&&&
&if (sAppSignature == sMySign) //验证成功
后面就是你自己的业务处理了。业务处理完成之后就是微信支付发货了。发货在下一节微信公众平台开发中讲到!
本栏目微信开发系列文章由微时代微信资讯网特约资深程序工程师独家原创!
转载请注明出处:微时代
上一篇:下一篇:

我要回帖

更多关于 微信二维码获取失败 的文章

 

随机推荐