博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
微信公众采坑记录-微信weixinjs分享那些坑
阅读量:6089 次
发布时间:2019-06-20

本文共 2756 字,大约阅读时间需要 9 分钟。

hot3.png

 

微信业务流程图

 

为什么要去微信再回到自己的服务器?通过什么方式去微信?

     去微信再回来的目的是:获取code值,根据code换取access_token最终获取微信用户的openid。这样去微信然后由微信返回自己的业务服务器

/**

     * 生成Authorize链接

     * appId 应用id

     * redirectUri 回跳地址

     * state 重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节

     * snsapiBase snsapi_base(不弹出授权页面,只能拿到用户openid)snsapi_userinfo(弹出授权页面,这个可以通过 openid 拿到昵称、性别、所在地)

     * url

     */

    public static String getAuthorizeURL(String appId, String redirectUri, String state, boolean snsapiBase) {

        Map<String, String> params = new HashMap<String, String>();

        params.put("appid", appId);

        params.put("response_type", "code");

        params.put("redirect_uri", redirectUri);

        // snsapi_base(不弹出授权页面,只能拿到用户openid)

        // snsapi_userinfo(弹出授权页面,这个可以通过 openid 拿到昵称、性别、所在地)

        if (snsapiBase) {

            params.put("scope", "snsapi_base");

        } else {

            params.put("scope", "snsapi_userinfo");

        }

        if (StrKit.isBlank(state)) {

            params.put("state", "wx#wechat_redirect");

        } else {

        params.put("state", state.concat("#wechat_redirect"));

        }

        String para = PaymentKit.packageSign(params, false);

        return authorize_uri + "?" + para;

    }

 

微信weixinjs分享那些坑

1、分享出去图片自己能看,他人看不见?红包 福利 领取 会被微信k掉的,坑不坑。

恭喜你,遇到这个问题调整文案吧,下面这些统统不行

desc = '51妹子网发红包啦,快来领红包吧!';

desc = '51妹子网发福利啦,快来领取红包吧!';

desc = '51妹子网发红包啦,快来领取吧!';

 

     2、域名重定向(例如扫码分享至微信)

     【pc】jad.yxyun.win/test.html 里面的扫码分享 打开【wx】,此时在index页面接入微信jssdk,控制分享相关的打开url

var prefixUrl = '${WECHAT_URL!}' + 'web/v321/jfect/${refTrid!}&=';

var prefixUrl2 = "${BASE_PATH }web/v321/jfect?uuids=${refTrid!}&t=t";

最开始在开发阶段,用微信模拟器直接调试,sdk成功,分享出去prefixUrl2也是完整的,安心了,认为一切ok。上预发布环境,按照正常的业务逻辑,用户去扫码,打开了

, sdk成功,看着一切正常,幸福来得太突然,分享看看,分享出去,点击页面大大的404有木有。

     回到微信开发者工具,没有问题啊。再去微信试试,结果还是404。经过长达一个小时的查阅资料和实验,最终修改连接为

var prefixUrl = '${WECHAT_URL!}' + 'web/v321/jfect/${refTrid!}&=';

这时候突然500啦,好高兴,终于是进到了业务系统后台了,不怕你不来,来了就说明至少成功了一半。

到这里得出的结论是(还没有去验证)多次重定向到微信,为了安全微信内部会把?前后进行截取【如var prefixUrl2 = "${BASE_PATH }web/v321/jfect?uuids=${refTrid!}&t=t";

变为 "${BASE_PATH }web/v321”】,以确保安全。举个栗子,某网站被钓鱼,拉取用户去了微信,结果微信检测的域名来去不一样,基于安全考虑给你去掉一部分他们认为潜在的威胁。

   最终解决方案是不出现问号传参,造成不需要传参的假象。到后台对请求进行截取处理,找到业务参数。

   示例代码

        /**

    * Support four types of url

    * 1: http://abc.com/controllerKey                 ---> 00

    * 2: http://abc.com/controllerKey/para            ---> 01

    * 3: http://abc.com/controllerKey/method          ---> 10

    * 4: http://abc.com/controllerKey/method/para     ---> 11

    * The controllerKey can also contains "/"

    * Example: http://abc.com/uvw/xyz/method/para

    */

   Action getAction(String url, String[] urlPara) {

        Action action = mapping.get(url);

        if (action != null) {

             return action;

        }

       

        // --------

        int i = url.lastIndexOf(SLASH);

        if (i != -1) {

             action = mapping.get(url.substring(0, i));

             urlPara[0] = url.substring(i + 1);

        }

       

        return action;

   }

具体代码实现看自行分析jfinal 以及jfinalAdmin

获取参数

 

String uuids = this.getPara(0);

 if (CheckUtils.isEmpty(uuids)) {

      uuids = this.getPara("uuids ");

 }

 

 

转载于:https://my.oschina.net/58685474/blog/1620730

你可能感兴趣的文章
vue-admin-template 切换回中文
查看>>
java模式之模板模式——抽象类
查看>>
[ACM] hdu 1251 统计难题 (字典树)
查看>>
Dell M1000e刀片服务器
查看>>
营销QQ年收入几十万自动来粉丝终极玩法
查看>>
填问卷,得《2015中国呼叫中心知识库现状与问题报告》
查看>>
VirtualBox 安装增强工具Guest Additions
查看>>
四、物理优化(4)分区视图
查看>>
Linux上的db2 卸载
查看>>
《从零开始学Swift》学习笔记(Day 39)——构造函数重载
查看>>
Google Authenticator实现linux用户登录双认证
查看>>
烂泥:解决Zblog文章无法打开
查看>>
科技部:“网络空间安全”重点专项 2017年度项目申报指南建议
查看>>
MariaDB10.1.22 Spider3.3腾讯补丁版分库分表下载
查看>>
Microsoft Hyper-V Server 2012开启虚拟化-PowerShell
查看>>
使用FreeBSD的ports安装hadoop
查看>>
poj1590
查看>>
引擎雏形
查看>>
页面打印 css
查看>>
mysql连接字段
查看>>