微信提供的JS-SDK wx.config/ready/error处理函数注意事项

简介

微信 JSSDK是微信公众号开发中的一个JavaScript工具包,提供了许多方便的接口和方法,方便开发者在微信公众平台上开发出更加丰富和互动的应用程序。通过微信JSSDK,开发者可以实现一系列基于微信公众号的功能,例如:分享到朋友圈、分享到对话、调起微信支付、获取地理位置等等。微信JSSDK可以用于微信公众号、微信小程序等平台的开发。

如果要使用微信提供的JS-SDK,其中一步是使用wx.config来注入配置信息来进行权限验证

但是wx.config是一个客户端的异步操作,如果需要在页面加载时就调用相关接口,就必须确保wx.config权限验证完毕后再调用接口。

wx.config({
  debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
  appId: '', // 必填,公众号的唯一标识
  timestamp: , // 必填,生成签名的时间戳
  nonceStr: '', // 必填,生成签名的随机串
  signature: '',// 必填,签名
  jsApiList: [] // 必填,需要使用的JS接口列表
});

通过ready接口处理成功验证

wx.ready(function(){
  // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
});

通过error接口处理失败验证

wx.error(function(res){
  // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
});

重要说明

微信提供了wx.ready函数,虽然文档上说wx.ready是验证成功时执行的函数,但权限验证成功或失败都会调用。

也就是说如果权限验证通过,只会调用wx.ready函数,如果权限验证失败,先调用wx.error函数,然后再调用wx.ready

所以在wx.ready里调用接口也不保险,我们需要在真正验证时才调用接口。

参阅资料:

https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 以下是ASP代码实现微信支付的示例: 1.引入微信支付API文件 ``` <!-- 引入微信支付API文件 --> <!-- 引入JSAPI支付方式的文件 --> <script src="https://res.wx.qq.com/open/js/jweixin-1.4.0.js"></script> <!-- 引入公共的JS文件 --> <script src="js/common.js"></script> ``` 2.定义微信支付参数 ``` <% '微信支付配置参数 appid = "wx1234567890" '微信公众号appid mch_id = "1234567890" '微信商户号 notify_url = "http://www.example.com/pay/notify.asp" '微信支付回调通知URL key = "abcdefghijklmnopqrstuvwxyz123456" '微信商户平台API密钥 trade_type = "JSAPI" '支付方式,JSAPI为公众号支付 %> ``` 3.获取微信支付openid ``` <% '获取微信支付openid openid = "" if Request.QueryString("code") <> "" Then '如果有授权code,则获取openid code = Request.QueryString("code") url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" & appid & "&secret=" & secret & "&code=" & code & "&grant_type=authorization_code" set xmlHttp = Server.CreateObject("MSXML2.ServerXMLHTTP") xmlHttp.open "GET", url, false xmlHttp.send jsonStr = xmlHttp.responseText set json = GetJson(jsonStr) If json.errorcode = "" Then openid = json.openid End If End If %> ``` 4.生成微信支付订单 ``` <% '生成微信支付订单 out_trade_no = GenerateOrderNo() '生成订单号 total_fee = 100 '支付金额(单位:分) body = "测试商品" '商品描述 spbill_create_ip = Request.ServerVariables("REMOTE_ADDR") '客户端IP地址 '构造微信支付统一下单接口请求参数 Set Params = Server.CreateObject("Scripting.Dictionary") Params.Add "appid", appid Params.Add "mch_id", mch_id Params.Add "nonce_str", GenerateNonceString() Params.Add "body", body Params.Add "out_trade_no", out_trade_no Params.Add "total_fee", total_fee Params.Add "spbill_create_ip", spbill_create_ip Params.Add "notify_url", notify_url Params.Add "trade_type", trade_type Params.Add "openid", openid '用户openid '生成签名 sign = GenerateSign(Params, key) '构造XML请求参数 xmlRequest = "<xml>" For Each Key in Params.Keys xmlRequest = xmlRequest & "<" & Key & ">" & Params.Item(Key) & "</" & Key & ">" Next xmlRequest = xmlRequest & "<sign>" & sign & "</sign>" xmlRequest = xmlRequest & "</xml>" '调用微信支付统一下单接口 url = "https://api.mch.weixin.qq.com/pay/unifiedorder" set xmlHttp = Server.CreateObject("MSXML2.ServerXMLHTTP") xmlHttp.open "POST", url, false xmlHttp.setRequestHeader "Content-Type", "application/xml" xmlHttp.send xmlRequest xmlResponse = xmlHttp.responseText '解析微信支付统一下单接口返回的XML数据 Set xmlDOM = Server.CreateObject("MSXML2.DOMDocument") xmlDOM.async = False xmlDOM.loadXML xmlResponse If xmlDOM.selectSingleNode("//return_code").text = "SUCCESS" Then '生成微信支付JSAPI参数 timestamp = Now() - DateSerial(1970, 1, 1) '生成时间戳 Set jsApiParams = Server.CreateObject("Scripting.Dictionary") jsApiParams.Add "appId", appid jsApiParams.Add "timeStamp", timestamp jsApiParams.Add "nonceStr", GenerateNonceString() jsApiParams.Add "package", "prepay_id=" & xmlDOM.selectSingleNode("//prepay_id").text jsApiParams.Add "signType", "MD5" jsApiParams.Add "paySign", GenerateSign(jsApiParams, key) End If %> ``` 5.调用微信支付 ``` <% '调用微信支付 If xmlDOM.selectSingleNode("//return_code").text = "SUCCESS" Then '调用微信支付JSAPI wx.config({ debug: false, appId: '<%=appid%>', timestamp: '<%=timestamp%>', nonceStr: '<%=jsApiParams.Item("nonceStr")%>', signature: '<%=GetJsApiSignature(jsApiParams.Item("appId"), jsApiParams.Item("nonceStr"), jsApiParams.Item("timeStamp"), jsApiParams.Item("package"), key)%>', jsApiList: ['chooseWXPay'] }); wx.ready(function() { wx.chooseWXPay({ timestamp: '<%=timestamp%>', nonceStr: '<%=jsApiParams.Item("nonceStr")%>', package: '<%=jsApiParams.Item("package")%>', signType: '<%=jsApiParams.Item("signType")%>', paySign: '<%=jsApiParams.Item("paySign")%>', success: function(res) { //支付成功,跳转到订单详情页面 window.location.href = "order_detail.asp?out_trade_no=<%=out_trade_no%>"; }, fail: function(res) { alert("支付失败:" + res.errMsg); } }); }); End If %> ``` 以上是ASP代码实现微信支付的基本流程,具体实现可能因版本不同而有所差异,需要根据实际情况进行调整。 ### 回答2: ASP代码实现微信支付的代码如下: 1. 首先,在ASP页面中引入微信支付的相关SDK和库文件。 2. 在ASP页面中设置微信支付的相关参数,包括微信支付的APPID、商户号、密钥等信息。 3. 创建一个微信支付的接口,接收客户端传递的支付参数。 4. 在接口中生成随机字符串、时间戳和签名等信息。 5. 将生成的签名信息和其他支付参数一起发送到微信支付的统一下单API接口。 6. 微信支付统一下单API接口返回预支付交易会话标识prepay_id。 7. 在接口中对prepay_id进行处理,生成支付参数供前端调起微信支付。 8. 将支付参数返回给前端,以便用户调起微信支付。 9. 前端通过微信JSAPI支付接口进行支付操作,调用微信支付页面。 10. 用户在微信支付页面完成支付操作。 11. 微信支付后台通知商户支付结果。 12. 商户后台根据微信支付后台通知的支付结果更新订单状态等相关操作。 13. 返回支付结果给微信支付后台,以确保后续重复通知的正常处理。 14. 微信支付后台对商户返回的支付结果进行验证,返回通知告知商户是否处理成功。 15. 商户根据微信支付后台的验证结果进行相应处理。 以上便是ASP代码实现微信支付的基本流程。具体实现中,需要根据自己的业务需求对代码进行适当的定制和优化。 ### 回答3: 微信支付是一种常见的在线支付方式,在ASP中可以通过调用微信支付的API来实现支付功能。以下是一个简单的ASP代码示例: 首先,需要在ASP页面中引入微信支付的SDK文件,可以通过在页面头部添加以下代码实现: ``` <%@ Page Language="C#" %> <%@ Import Namespace="微信支付SDK的命名空间" %> ``` 接着,在页面中定义一些必要的变量,用于存储商户号、订单号、支付金额等信息。可以通过以下代码实现: ``` <script runat="server"> string mchId = "商户号"; string orderId = "订单号"; decimal amount = 10.00; // 支付金额 </script> ``` 然后,可以在页面中编写调用微信支付的代码。首先需要创建一个微信支付对象,然后设置相关参数,包括商户号、订单号、支付金额等。接着可以调用支付API进行支付,最后可以根据返回的结果进行一些处理。可以通过以下代码实现: ``` <script runat="server"> // 创建微信支付对象 WeChatPay wcPay = new WeChatPay(); // 设置支付参数 wcPay.MchId = mchId; wcPay.OrderId = orderId; wcPay.Amount = amount; // 调用支付API进行支付 PayResult payResult = wcPay.Pay(); // 处理支付结果 if (payResult.ResultCode == "SUCCESS") { // 支付成功,进行相关处理 } else { // 支付失败,进行相关处理 } </script> ``` 在这个示例中,使用了一个名为`WeChatPay`的微信支付对象,该对象封装了微信支付的相关方法和属性。需要根据实际情况,修改商户号、订单号、支付金额等参数。另外,示例中的支付结果`PayResult`是一个自定义的类,用于存储支付结果,需要根据实际情况进行修改。 需要注意的是,以上示例只是一个简单的示例,实际的微信支付可能会涉及到更多的参数和逻辑处理。在实际开发中,可以根据微信支付的官方文档进行更详细的配置和调用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值