微信公众号支付
需求: 新旧收银台合并
问题: 当前页面的url未注册
- 错误信息如下图: 网上搜索的问题答案无非就以下2种
1. 授权支付目录配置有误
- 微信公众号支付已经在生产环境运行2年了
- 检查授权域名目录配置是正确的
- 如上图,配置授权目录为
***.com.cn/m/insurance_unlogin/
- 千万不要忘记授权目录后面的
斜杠
2. appid配置错误
- 只有一个appid,检查是正确的
问题分析
未合并收银台之前是可以成功调起支付的
怀疑步骤流程或接口请求数据不对,比对之后发现是一样的,前前后后弄了一天,郁闷了一天...唉声叹气之时,华哥将我分享出去的产品,再次分享出来,这时候神奇的事情发生了,微信支付成功,不会再出现当前页面URL未注册了.哈哈,赶紧研究下再次分享发生了什么
由于链接中携带测试环境及公司信息,故用以下网址演示
- 比如我们打开优惠谷 http://youhuigu.cn
- 点击微信右上角的分享,发送给朋友**(微信群或个人)**
- 微信群打开链接,复制链接 http://youhuigu.cn/?from=groupmessage
- 朋友打开链接,复制链接 http://youhuigu.cn/?from=singlemessage
- 看见2次链接变化没有, 有search参数
- 发送给群
?from=groupmessage
- 发送给朋友
?from=singlemessage
- 错误代码如下:
window.location.href = location.origin + location.pathname.replace('index.html', 'client.html') + '#insurance/cashier/index';
老框架跳转新框架的时候,由于页面发生变化,将index.html页面替换为client.html,同时也去掉了location.search(天坑呀)
,此处去掉location.search主要是因为携带了shareId
,在新框架中用不着也无法解析,去掉了location.search也就意味着去掉了from=***message
解决问题
3. 不是来自微信分享(微信环境)
search中没有
from=***message
- 修正后代码
// 去掉shareId, from是来自微信分享, 没有微信公众号无法支付,报错URL未注册
var fromStr = '';
if (searchObj && searchObj.from) {
fromStr = '?from=' + searchObj.from;
}
window.location.href = location.origin + location.pathname.replace('index.html', 'client.html') + fromStr + '#insurance/cashier/index';
总结
- 这是微信公众号支付,当前页面URL未注册的第三种场景,若有不对之处,请留言更正
- 微信公众号支付, 如果分享到微信的产品需要处理location.search,一定要注意
from='***message'