起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: ufo1982ufo

[结贴] 微信里分享后新用户点击进入后提示40029.

[复制链接]
发表于 2017-5-18 17:40:09 | 显示全部楼层
ufo1982ufo 发表于 2017-5-18 17:12
这个是main.w页面,在index.w使用shell跳转进来:

这个URL 使用 Utils.getShareUrl() 生成就可以!
只要是URL上带的参数都能获取到的!

你先使用一个简单页面测试一下,如果成功了再考虑复杂的页面吧!
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

64

主题

321

帖子

679

积分

高级会员

Rank: 4

积分
679
QQ
 楼主| 发表于 2017-5-18 21:32:26 | 显示全部楼层
liangyongfei 发表于 2017-5-18 17:40
这个URL 使用 Utils.getShareUrl() 生成就可以!
只要是URL上带的参数都能获取到的!

用getShareUrl生成的url是这样的(带有_shareHash参数):
  1. http://xxx.com:80/mfxxl/v-YfIVFv-zh_CN-/mfxxl/index.w?_shareHash=%23!main%2F%2F(%23!infolistcontent%2F!%2FwindowContainer4%2F%2F(%7B%22src%22%3A%22%2Fmfxxl%2Fv-YfIVFv-zh_CN-%2Fmfxxl%2Finfodetail.w%22%2C%22params%22%3A%7B%22data%22%3A%7B%22info_id%22%3A2%7D%7D%7D))
复制代码

如果这个url和微信拼接,必须经过encodeUricomponent处理。处理后
  1. http%3A%2F%2Fxxx.com%3A80%2Fmfxxl%2Fv-YfIVFv-zh_CN-%2Fmfxxl%2Findex.w%3F_shareHash%3D%2523!main%252F%252F(%2523!infolistcontent%252F!%252FwindowContainer4%252F%252F(%257B%2522src%2522%253A%2522%252Fmfxxl%252Fv-YfIVFv-zh_CN-%252Fmfxxl%252Finfodetail.w%2522%252C%2522params%2522%253A%257B%2522data%2522%253A%257B%2522info_id%2522%253A2%257D%257D%257D))
复制代码

提交时拼接微信前后:
  1. https://open.weixin.qq.com/connect/oauth2/authorize?appid=XXXXXXXXXXXXXXX&redirect_uri=http%3A%2F%2Fxxx.com%3A80%2Fmfxxl%2Fv-YfIVFv-zh_CN-%2Fmfxxl%2Findex.w%3F_shareHash%3D%2523!main%252F%252F(%2523!infolistcontent%252F!%252FwindowContainer4%252F%252F(%257B%2522src%2522%253A%2522%252Fmfxxl%252Fv-YfIVFv-zh_CN-%252Fmfxxl%252Finfodetail.w%2522%252C%2522params%2522%253A%257B%2522data%2522%253A%257B%2522info_id%2522%253A2%257D%257D%257D))&response_type=code&scope=snsapi_userinfo&state=STATE&connect_redirect=1#wechat_redirect
复制代码

微信就报uri错误!是不是过长了!
回复 支持 反对

使用道具 举报

发表于 2017-5-19 10:44:47 | 显示全部楼层
ufo1982ufo 发表于 2017-5-18 21:32
用getShareUrl生成的url是这样的(带有_shareHash参数):

如果这个url和微信拼接,必须经过encodeUrico ...

不确定,需要测试!要不这个字符串URL,你先在 java 文件中写死试试吧!

1.先使用一个简单的URL  w 页面。测试能否打开,保证整体的URL是正确的!

简单页面成功后再去研究复杂的URL  是什么原因

2.复杂的URL 在java 中写死,调用java 服务打开这个地址,(就是视频里讲得哪种标准方法) 是否可以呢??

如果也可以,那就基本上说明可以这样用!然后在上网搜下错误信息,可能是什么原因导致的!自己排除一下
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

64

主题

321

帖子

679

积分

高级会员

Rank: 4

积分
679
QQ
 楼主| 发表于 2017-5-19 11:15:24 | 显示全部楼层
liangyongfei 发表于 2017-5-19 10:44
不确定,需要测试!要不这个字符串URL,你先在 java 文件中写死试试吧!

1.先使用一个简单的URL  w 页面 ...

担心如果在java里面写死了,现在即使可以用,后期修改和维护会不会成本过高?

然后我试了一下可以通过如下链接进入嵌套在main中的windowcontainer中的w页面:
  1. http://xxx.com/mfxxl/v-bMRnUf-zh_CN-/mfxxl/index.w#!main//(#!windowContainer4//({"src":"/mfxxl/v-bMRnUf-zh_CN-/mfxxl/infodetail.w","params":{"data":{"info_id":2}}})/!/infodetailcontent)
复制代码

然后url后可以编码得到:
  1. http%3A%2F%2Fxxx.com%2Fmfxxl%2Fv-bMRnUf-zh_CN-%2Fmfxxl%2Findex.w%23!main%2F%2F(%23!windowContainer4%2F%2F(%7B%22src%22%3A%22%2Fmfxxl%2Fv-bMRnUf-zh_CN-%2Fmfxxl%2Finfodetail.w%22%2C%22params%22%3A%7B%22data%22%3A%7B%22info_id%22%3A2%7D%7D%7D)%2F!%2Finfodetailcontent)
复制代码
用微信授权拼接类似:https://open.weixin.qq.com/connect/oauth2/authorize?appid  后在微信调试里提示“response_type 参数错误”,这个参数就只有一个code可以写吧,一个是微信本身的问题,还有一个是不是返回baas/weixin里响应的问题!但是在微信中直接打开有1/20的几率可以打开,不过每次基本都是等待好几分钟才行,实在不知道后台在做了什么!


我有看了takeout的代码:
  1.                 } else if (weixinCode !== "") {
  2.                         this._deviceType = "wx";
  3.                         // 判断微信环境
  4.                         if (justep.Browser.isWeChat) {
  5.                                 this.wxApi = new navigator.WxApi("wx3fb4a0dd8ea0730c");
  6.                         }

  7.                         Baas.sendRequest({
  8.                                 "url" : "/weixin/weixin",
  9.                                 "action" : "userinfo",
  10.                                 "async" : false,
  11.                                 "params" : {
  12.                                         code : weixinCode
  13.                                 },
  14.                                 "success" : function(weixinUser) {
  15.                                         self._userID = weixinUser.openid;
  16.                                         // 微信名称**********
  17.                                         self._userDefaultName = weixinUser.nickname + "(来自微信的用户)";
  18.                                         self._userDefaultAddress = weixinUser.country + weixinUser.province + weixinUser.city;
  19.                                         self._userPhotoURL = weixinUser.headimgurl;
  20.                                 }
  21.                         });
复制代码
我又看了UI2/SYSTEM/COMPONENT/JUSTEUP/WIDNOW/INDEX.HTML代码:
  1. <html>
  2.         <head>
  3.         <meta charset="utf-8" />
  4.         <meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no"/>
  5.        
  6.         </head>
  7.         <body style="color:gray;margin:0px;text-align:center;padding-top:20%">
  8.                 正在努力加载中......
  9.                 <script type='text/javascript'>
  10.                         var url = '@indexUrl@';
  11.                         var search = window.location.search;
  12.                         if (search){
  13.                                 if (url.indexOf("?") != -1){
  14.                                         url += "&";
  15.                                 }else{
  16.                                         url += "?";
  17.                                 }
  18.                                 url += search.substr(1) + window.location.hash;
  19.                         }
  20.                         window.location.href= url;
  21.                 </script>
  22.         </body>
  23. </html>
复制代码
还有util代码:
  1.                 getShareUrl:function(url){
  2.                         var currentUrl = new justep.URL(url || location.href);
  3.                         if(currentUrl.getHash()){
  4.                                 var _shareHash = currentUrl.getHash();
  5.                                 currentUrl.setParam("_shareHash",_shareHash);
  6.                                 currentUrl.setHash();
  7.                         }
  8.                         return currentUrl.toString();
  9.                 }
复制代码


其实微信中如果用户经过微信授权进来经过index.html后又拼接了search和hash(怪不得我之前微信的code被丢弃!),然后在 Utils.getShareUrl()分享时又把code加入了。
导致用户点击分享后url获取code加之微信环境,就进行Baas.sendRequest,如果在5分钟内微信提示40163提示code被使用,超过5分钟提示40029只能使用一次code。基本问题的原因就是这些引起。
我试了起步公众号的外卖分享出去也是有code,如果新用户点击进入也是会发送Baas.sendRequest。
分享出去的url还有_sharehash,起初用这个判断避免Baas.sendRequest,结果这个实际也被index.html处理掉了。
最后用from参数判断,不去查询微信就没有40029和40163了!
这个在后期能不能把微信环境中这个code给去掉,而且加入微信授权的前缀?


回复 支持 反对

使用道具 举报

发表于 2017-5-19 11:56:34 | 显示全部楼层
ufo1982ufo 发表于 2017-5-19 11:15
担心如果在java里面写死了,现在即使可以用,后期修改和维护会不会成本过高?

然后我试了一下可以通过如 ...

我让你在java中写死测试,只是为了测试这个URL 可以可以这样用!!(就只用它标准的API,调用URL)
如果URL 可以用,就可以排除URL不对的问题了!


测试只不过是使用排除法!找到问题的根源而已!
如果你已经理解微信打开公众号地址的原理!! 自己在研究下吧


index.html是通过
window.location.href 重定向打开的 index.w 页面! 不建议给index.html传参,他不会给你重新传到index.w的!!

index.html是最资源更新使用的!!能保证服务器更新后,客户端不会缓存,其他不支持
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

64

主题

321

帖子

679

积分

高级会员

Rank: 4

积分
679
QQ
 楼主| 发表于 2017-5-19 12:37:00 | 显示全部楼层
liangyongfei 发表于 2017-5-19 11:56
我让你在java中写死测试,只是为了测试这个URL 可以可以这样用!!(就只用它标准的API,调用URL) ...

好的,谢谢。避免我乱捣腾!我再试试看!

另外问一下,index.html只是负责资源更新,我看他的search和hash参数这些都是传给w文件,其实还起到一个跳转的作用。真正的业务处理都是w文件,对吗?
在native下面的对应www文件夹有很多的xxx.w.html是做什么用的!如果我需要只简单更新一下w文件和js文件,可以直接覆盖对应文件吗?这样就避免了重新编译UI,也避免网站的全部覆盖。版本过多有不能随便删除(有很多分享出去的链接需要老的资源版本)!
回复 支持 反对

使用道具 举报

发表于 2017-5-19 13:59:45 | 显示全部楼层
ufo1982ufo 发表于 2017-5-19 12:37
好的,谢谢。避免我乱捣腾!我再试试看!

另外问一下,index.html只是负责资源更新,我看他的search和ha ...

对,你说的对!那就是index.html确实可以传参过去!

有一个资源版本号的目录!每次编译资源都会重新生成的这个目录
而index.html 在这个目录外层, 所以能保证永远访问的是最新的资源!

部署资源的时候参考:http://docs.wex5.com/wex5-runtime-java/

同时{WeX5/BeX5根目录}\apache-tomcat\webapps\app-template中的内容复制到页面应用的根目录

老版本的URL 就可以自动访问最新的版本资源了!
资源版本号的目录,会自动定向到最新资源的!所以旧的链接完全可以访问到新的资源!
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

64

主题

321

帖子

679

积分

高级会员

Rank: 4

积分
679
QQ
 楼主| 发表于 2017-5-19 14:51:58 | 显示全部楼层
liangyongfei 发表于 2017-5-19 13:59
对,你说的对!那就是index.html确实可以传参过去!

有一个资源版本号的目录!每次编译资源都会重新生成 ...

我看见那个目录下是justep做的,应该是专门为起步开发的程序准备的!
  1.         <mime-mapping>
  2.                 <extension>w</extension>
  3.                 <mime-type>text/html</mime-type>
  4.         </mime-mapping>
  5.         <filter>
  6.                 <filter-name>cache</filter-name>
  7.                 <filter-class>com.samaxes.filter.CacheFilter</filter-class>
  8.                 <init-param>
  9.                         <param-name>static</param-name>
  10.                         <param-value>true</param-value>
  11.                 </init-param>
  12.                 <init-param>
  13.                         <param-name>expirationTime</param-name>
  14.                         <param-value>3153600000</param-value>
  15.                 </init-param>
  16.         </filter>       
  17.         <filter>
  18.                 <filter-name>resourceFilter</filter-name>
  19.                 <filter-class>com.justep.resource.filter.ResourceFilter</filter-class>
  20.                 <init-param>
  21.                         <param-name>path</param-name>
  22.                         <!-- where is app.json, example: /hello/UI2 -->
  23.                         <param-value>@path@</param-value>
  24.                 </init-param>
  25.         </filter>
复制代码


意思是在哪个过期时间之后,即使url是之前的版本号,还是会自动访问到目前最新的版本资源??
回复 支持 反对

使用道具 举报

发表于 2017-5-19 15:42:13 | 显示全部楼层
ufo1982ufo 发表于 2017-5-19 14:51
我看见那个目录下是justep做的,应该是专门为起步开发的程序准备的!

是的!你动手试试就知道了! URL 上资源版本号,随便修改,他都能找到正确的URL地址!
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

64

主题

321

帖子

679

积分

高级会员

Rank: 4

积分
679
QQ
 楼主| 发表于 2017-5-20 11:50:18 | 显示全部楼层
liangyongfei 发表于 2017-5-19 15:42
是的!你动手试试就知道了! URL 上资源版本号,随便修改,他都能找到正确的URL地址! ...

如果修改的是pathname部分就可以,如果改了hash部分就不行了!比如windowcontainer里的src就不行,详细页面其实还是依赖老资源,有没有这个也可以识别就更完美了!否则还是需要留着老版本的!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-4-20 18:05 , Processed in 0.093224 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表