位置:鹿城圈 » 微信资讯 » 微信学院 » 微信技术院 » 正文

微信公众平台开发之微信支付--二维码支付代码

发布日期:2015-11-22  来源:果壳网   浏览次数:110
        核心提示:在大家热切的期盼中,微信移动支付终于能面见公众。腾讯挟用户已突破5亿之势,微信携手“同胞兄弟”财付通如火如荼向第三方支付...

在大家热切的期盼中,微信移动支付终于能面见公众。

腾讯挟用户已突破5亿之势,微信携手“同胞兄弟”财付通如火如荼向第三方支付市场进军。为吸引更多的用户,公司在微信支付还未对外公开时,就已经悄悄上线微信支付,(下一节将给大家分享微信支付开发全过程),这节将为大家分享微信支付二维码支付,就是在消费的时候,您只需要拿出手机,通过微信扫一扫,扫描我们前台的二维码,即可完成支付。整个微信二维码支付过程中的体验无法用言语来形容。

言归正卷,既然是微信二维码支付,第一步得先生成二维码,这里我直接使用的是腾讯提供的接口(微信二维码生成借口DLL下载)。有需要微信支付生成二维码源代码的,请在下方留言

生成二维码实例代码:

效果图如下:

将上面的DLL下载下来之后,在项目中添加引用,需要引入以下几个命名空间:

using System.Drawing;

using ZXing;

using ZXing.Rendering;

using ZXing.Common;

using (System.IO.MemoryStream mstream = new System.IO.MemoryStream())

{

System.Drawing.Image qrcodeImg = null;

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, Com.WX.Common.GetDateTimeInt());

String URL = "http://www.wechatstyle.com";

string payUrl = string.Format("{0}/forward.aspx?{1}&sign={2}", URL, param, Com.WX.Common.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(微信支付JS核心文件

)调用微信支付输入密码界面:

微信支付界面

支付完成后,微信将回调您的接口,推送交易数据

在notify接口中,处理微信发过来的数据:微信发过来的参数分两部分,一部分是POST中的xml数据,另一部分是从url中传过来的

//获取回调参数

NamevalueCollection namevalues = null;

string sPrivateKey = "2b6Ujngi2gqTRqJKoBP7Z7dWT5xuqgS5Az8iEZKG9";

namevalues = Request.Form.Keys.Count > 6 ? Request.Form : Request.QueryString;

Dictionary dicReceive = new Dictionary();

List lstReceiveKey = new List();

foreach (string sKey in namevalues.Keys)

{

dicReceive.Add(sKey, Request[sKey]);

}

解析POST中的参数

获取POST参数的代码

Stream inStream = Request.InputStream;

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").InnerText;

string sAppID = xmlDoc.SelectSingleNode("xml/AppId").InnerText;

string sIsSubscribe = xmlDoc.SelectSingleNode("xml/IsSubscribe").InnerText;

string sTimeStamp = xmlDoc.SelectSingleNode("xml/TimeStamp").InnerText;

string sNonceStr = xmlDoc.SelectSingleNode("xml/NonceStr").InnerText;

String AppSignature = xmlDoc.SelectSingleNode("xml/AppSignature").InnerText;

解析之后要进行安全验证,也就是验证签名

//开始验证签名

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) //验证成功

后面就是你自己的业务处理了。业务处理完成之后就是微信支付发货了。发货在下一节微信公众平台开发中讲到!

果壳网
关注图片
果壳网
  • 果壳网
  • 果壳网是主要面向都市科技青年的社交网站,并提供负责任、有智趣的泛科技主题内容。在这里可以关注感兴趣的人,阅读他们的推荐,...
  • 2013-08-07  [北京]

果壳网 微信公众号文章推荐

微信支付绑卡时手机验证码收不到怎么处理?
好友发送的红包,无法接收到怎么办?
如何提现收到的红包资金?
收到的红包可以转发吗
微信支付更换姓名(注销)的方法
忘记微信支付密码如何处理?
微信绑卡时提示与银行信息不符怎么办?
微信提现时出现异常情况怎么办?
微信红包零钱的资金还有其他用途吗?
微信零钱提现什么时间到账?
微信零钱提现需要收费吗?
微信红包零钱提现什么时间到账?
我不是大陆居民,是否可以收红包?
微信红包如何收红包
  • 微信红包如何收红包
  • 1)收到红包消息=》点击进入红包领取页面=》拆红包=》领取成功;2)领取的红包资金会自动收入零钱,您可以在“钱包”=》“零钱”...
  • 2015-11-25  
  • 微信导航网官方
微信红包如何提现收到的红包资金?
微信红包提现限额是多少?
什么是拼手气群红包?
微信红包什么是普通红包?
微信发送红包的限额是多少?
微信红包好友发送的红包,无法接收到怎么办?
微信红包如何发送多个红包给同一好友?
微信如何查看红包发送记录?
微信红包包好后没有发送,在哪里可以重新再发送?
微信发出的红包没有领完可以再转发给其他小伙伴吗?
微信红包包好后没有发出去或者没有被领完,钱可以退回吗?
微信红包没有被领完的红包在哪里可以查询
微信如何提现收到的红包资金?
微信收到的红包资金到哪里去查看?
微信如何查看收到的红包记录?
如何关注微信红包公众号?
分享与收藏:  微信资讯搜索  告诉好友  关闭窗口  打印本文 本文关键字:
 
同类微信资讯文章
微信支付绑卡时手机验证码收不到怎么处理?
好友发送的红包,无法接收到怎么办?
如何提现收到的红包资金?
收到的红包可以转发吗
微信支付更换姓名(注销)的方法
忘记微信支付密码如何处理?
微信绑卡时提示与银行信息不符怎么办?
微信提现时出现异常情况怎么办?
微信红包零钱的资金还有其他用途吗?
微信零钱提现什么时间到账?
热门评论
 
果壳网
最新出炉微信资讯
别扫这,太危险
 
网站标志