- 公众号里的自定义菜单与服务器配置是互斥的吗?
原本我在公众号管理后台定义了自定义菜单,但是后来我启用了服务器配置后之后,公众号里的自定义菜单不见了。 只有当我把服务器配置禁用,才能启用自定义菜单,怎么会是这样?
2017-11-16 - mp配置服务器URL
mp配置服务器url这个地方,看文档里提到验证token时是用get请求,而转发消息是使用post请求,意思是这个URL的接口要同时支持POST和GET请求?
2017-11-16 - 服务号token验证
在服务号管理页面配置的token是mptokenauth,业务服务器收到了微信后台发过来的验证信息,如下: { signature: '141bf3cd6f3fae94b0ddae3fb98c19931e068341', echostr: '17047365527968675687', timestamp: '1510823015', nonce: '370631640' } 根据文档里说的我把数据拿出来做验证,文档如下: ---------------------------------------------------文档开始----------------------------------------------------------------- 第二步:验证消息的确来自微信服务器 开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带参数如下表所示: 参数 描述signature微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。timestamp时间戳nonce随机数echostr随机字符串 开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。加密/校验流程如下: 1)将token、timestamp、nonce三个参数进行字典序排序 2)将三个参数字符串拼接成一个字符串进行sha1加密 3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信 ------------------------------------------------------文档结束-------------------------------------------------------------- 我对其进行验证的js代码如下: const crypto = require('crypto') const autodata = { signature: '141bf3cd6f3fae94b0ddae3fb98c19931e068341', echostr: '17047365527968675687', timestamp: '1510823015', nonce: '370631640' } const sha1 = (str) => { var sha1sum = crypto.createHash('sha1') sha1sum.update(str) str = sha1sum.digest('hex') return str } var strall = autodata.nonce + autodata.timestamp + 'mptokenauth' var authsign = sha1(strall) 结果计算出来的字符串是c5f0c9e13bb89ec99014975effd568dc8a9d0501,跟消息里的签名不一致。
2017-11-16 - 服务号发送模板消息提示invalid openid
一个服务号A,与之关联有一个小程序B。 有用户1、2、3在小程序里操作后可以收到小程序接口发送的模板消息。 但是用在小程序里获得的OpenID通过服务号的接口发送模板消息,却提示40003,invalid openid。 难道同一用户在服务号A里的OpenID跟在小程序里的OpenID不一样吗?
2017-11-15 - 支付后收到多次结果通知,发送一次小程序模板消息,很多时候会收到两条
我的支付结果通知的逻辑是,收到通知后,检查订单状态是否已支付: 1,若是,则发送 <xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml> 给结果通知,再return返回。 2,若未支付,则更新订单状态为已支付,然后发送模板消息给微信用户,最后发送 <xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml> 给结果通知。 从日志可以看到一个支付订单能收到5条以上的结果通知,而我只在收到第一条时给用户发模板消息,可用户大多数时候收到的是两条消息。
2017-11-15 - 模板消息包含中文时报47001
后台业务代码如下(文件编码是UTF-8): -------------------------------------------------------------------------------- var ctmntyoptions = { hostname: 'api.weixin.qq.com', path: '', method: 'POST', headers: { 'Content-Type': 'application/json; charset=utf-8', 'Content-Length': '' } } const SendTemplateMsgToCustomer = (_acctoken, notifyparams) => { return new Promise(function (resolve) { ctmntyoptions.path = strCtmNotifyPath + _acctoken let strparams = JSON.stringify(notifyparams) ctmntyoptions.headers['Content-Length'] = strparams.length var notifyreq = https.request(ctmntyoptions, function (notifyres) { var _notifyrtn = '' notifyres.on('data', function (_rtndata) { _notifyrtn += _rtndata }) notifyres.on('end', function () { let _rtndata = JSON.parse(_notifyrtn) if (_rtndata && 'errcode' in _rtndata) { if (_rtndata.errcode === 0) { resolve(true) } else { resolve(false) } } else { resolve(false) } }) }) notifyreq.on('error', (e) => { console.log('Send template msg request fail', e) }) notifyreq.write(strparams) notifyreq.end() }) } -------------------------------------------------------------------------------- 日志数据: {"touser":"oRuoC0ZwC6QPNcdyr9A********","template_id":"Fbn5W7r1fo2cwbhIl2M5*******","form_id":"wx20171114101441532f5fbfe508990*****","data":{"keyword1":{"value":"20171114082329*****10101"},"keyword2":{"value":"2017年11月14日 10:14:46"},"keyword3":{"value":"总部"},"keyword4":{"value":"0.2 元"},"keyword5":{"value":null}}} 返回数据: {"errcode":47001,"errmsg":"data format error hint: [zwWEQA0687ge21]"} 当模板数据里包含中文时,就返回47001,发送不成功。 但是当我把中文去掉,模板消息就能发送成功。
2017-11-14 - 收不到“支付结果通知”(支付回调)
业务服务向微信发送统一下单请求成功,结果返回用户,用户支付成功,但是在统一下单设置的通知地址收不到任何通知。此通知地址已使用浏览器确认可以访问。 业务服务器SDK使用的是wafer2.
2017-11-02 - 启动页面获取参数的问题
我在实现一个动态二维码打开小程序的功能,考虑了两种方式: 一、使用“普通链接二维码打开小程序”功能 使用这种方式有个问题是参数只能在页面的onLoad事件里提取q参数获得,而onLoad事件只在页面生成的时候调用一次,如果仅是退出小程序而不是关闭小程序时再次扫二维码,那么onLoad事件不会被触发,只有onShow事件是每次显示页面都会被触发的,可onShow事件貌似没有参数。 二、使用生成二维码API 我还没有写相关的代码,但在看文档里发现,虽然接口B满足数量了要求,然而它的scene字符只能是32个以内,又不能用。
2017-09-18 - 普通二维码打开小程序,参数不见了
使用微信开发工具,增加了编译模式,传进去了参数,如下图: [图片] 调试时发现onLoad只能获取到http://rgy.cn/door?id这些,后面的参数不见了,如下图: [图片] 难道参数里不能带‘=’符号?
2017-09-18 - 用户在小程序里支付成功后,商户怎么获取实时通知?
用户如果支付成功,在他自己的微信有会提醒,但是商户并没有收款通知,怎么让商户实时获得收款通知呢?
2017-09-12