又醒着到清晨

前段时间微信发布JS-SDK接口,其中包括了微信支付,然后就勾起了我一个想法,那是不是我可以在微信上做个H5朋友给我转钱啊,后来才觉得这个想法有多煞笔。

好吧,言归正传,我也是从0开发,摸索了很多资料,网上的教程详细不详细,我不知道,反正没有我的详细

微信网页支付,ASP.NET开发,往下看吧。

首先我要先说一下我遇到的几个问题

1、修改测试目录失败,mch_id和appid没有关联关系。

2、签名错误。

3、公众号支付签名错误,无法发起该交易。

第一个错误,我无奈了1整天时间,各种百度,谷歌,都没有找到这样的错误,千万别问客服啊,她们只会让你看文档,后来是直接联系的一个微信支付技术人员把appid给他之后就解决了,如果你们也遇到这样的问题可以发邮件给:wepayTS(微信支付技术支持)<wepayTS@tencent.com>

好,现在开始开发:

第一步:配置js-sdk配置信息

api: 微信JS-SDK说明文档

使用JS-SDK 必须引用微信js文件:<script src=""></script>

然后 配置config 权限验证:

wx.config({debug: false,appId: 'wxc94d5d50202f9dcf', // 必填,公众号的唯一标识timestamp: <%=wxconfig.timestamp%>,//时间戳nonceStr: "<%=wxconfig.nonceStr%>",//随机字符串signature: "<%=wxconfig.signature%>", //权限签名 与微信支付签名没有半毛钱关系jsApiList: [ // 必填,需要使用的JS接口列表'onMenuShareTimeline','onMenuShareAppMessage','getNetworkType','chooseWXPay']});所有的权限验证算吗 为了安全 需要在后台程序实现

这里的算法是用SHA1,字典排序,而微信支付全部用MD5,注意参数的大小写,url是当前请求网页的url 包括参数。#前面的所有。(需要去公众平台绑定安全域名否则会报invalid url domain 的错误)

/// <summary>/// 获取JS-SDK签名包/// </summary>/// <param name="appid"></param>public wxHandleModel.wxJSconfig GetTicket(string url){wxservice.wxSoapClient wxs = new wxservice.wxSoapClient();wxs.Get_access_token(appid);string ticket = wxs.Get_access_ticket(appid, false); //验证算法签名的ticket,wxHandleModel.wxJSconfig wxconfig = new wxHandleModel.wxJSconfig();wxconfig.appId = appid;wxconfig.nonceStr = GenerateCheckCode(16); //随机字符串wxconfig.timestamp = ConvertDateTimeInt(DateTime.Now); //时间戳wxconfig.signature = SHA1("jsapi_ticket=" + ticket + "&noncestr=" + wxconfig.nonceStr + "×tamp=" + wxconfig.timestamp + "&url=" + url);return wxconfig;}

api文档中说的非常的清楚,生成签名之前必须先了解一下jsapi_ticket,jsapi_ticket是公众号用于调用微信JS接口的临时票据。正常情况下,jsapi_ticket的有效期为7200秒,通过access_token来获取。由于获取jsapi_ticket的api调用次

数非常有限,频繁刷新jsapi_ticket会导致api调用受限,影响自身业务,开发者必须在自己的服务全局缓存jsapi_ticket。

wxservice 是我写的web service用来获取更新ticket的,这是看自己如何写方便,一定要缓存,ticket调取频率非常有限。

常见的错误:

invalid url domain 当前页面所在域名与使用的appid没有绑定

invalid signature 签名错误,可以在wx.error函数中 写一个ajax,更新ticket,,刷新当前页,如果还是出现这个错误的,检查签名生成参数。

the permission value is offline verifying 这个错误是因为config没有正确执行,或者是调用的JSAPI没有传入config的jsApiList参数中

function not exist 当前客户端版本不支持该接口,请升级到新版体验,好像是要6.01以上的版本

更多错误 看api吧。

签名写好之后,返回前台JS-sdk所有需要页面加载执行的函数需要写在微信加载事件中,wx.ready(function () { });

document.querySelector('#payOK').onclick = function () {wx.chooseWXPay({timestamp: <%=wxpayconfig.timestamp%>, // 支付签名时间戳nonceStr: "<%=wxpayconfig.nonceStr%>", // 支付签名随机串package: "<%=wxpayconfig.package%>", // 统一支付接口返回的package包signType: "<%=wxpayconfig.signType%>", // 签名方式,'MD5'paySign: "<%=wxpayconfig.paySign %>", // 支付签名success: function (res) {if(res.err_msg == "get_brand_wcpay_request:ok" ){alert("支付成功");// 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。}}});};这是微信支付点击支付执行的事件,当然支付签名和package包也要在后台实现

第二步:微信支付参数和签名如果你没有遇到我上面说的第一个问题的话,那么你应该可以直接在微信支付的开发配置中设置 测试支付目录,ok,下面签名算法

使用微信支付前都是通过 统一下单 接口为当前设置一个预支付交易会话标识:prepay_id,支付签名和package包都需要用到他。

请求参数并不是所有的都需要,如果你JSAPI支付的话那么openid必须有,如果是NATIVE那么商品ID必须有,文档写的很详细,我是JSAPI支付

偶尔为街头独特的风景驻足,

又醒着到清晨

相关文章:

你感兴趣的文章:

标签云: