zoukankan      html  css  js  c++  java
  • 分享到微信填坑之路

    1、注册了公众平台测试账号,下载了jssdk。
    而后开始了,生成自定义分享卡片之旅。

    坑点一: 生成签名的url一定要是当前页面的url,所以 正确的姿势是:(url一定是从前端传过来的location.href)

         更新:获取参数直接用:  easyWechat ->  

    public function getSignPackage(Request $request)
        {
            // return json_encode('suibian');die();
            $jsapiTicket = $this->getJsApiTicket();
    
            // 注意 URL 一定要动态获取,不能 hardcode.
            $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
            // $url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
            $url = $request::get("url");
            
            Log::info("===========url=>".json_encode($url));
            $timestamp = time();
            $nonceStr  = $this->createNonceStr();
    
            // 这里参数的顺序要按照 key 值 ASCII 码升序排序
            $string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr&timestamp=$timestamp&url=$url";
    
            $signature = sha1($string);
    
            $signPackage = array(
                "appId"     => $this->appId,
                "noncestr"  => $nonceStr,
                "timestamp" => $timestamp,
                "url"       => $url,
                "signature" => $signature,
                "rawString" => $string,
                "ticket" => $jsapiTicket
            );
            return json_encode($signPackage);
        }
    

     坑点二: 一定要关注测试号的公众号哦

     坑点三: 当前页面的传给后端一定要是正确的。

              我就在vue中犯下了错误,在app.vue中就向后端传送了 url ,结果 传送的url为:http://xxx/  本应该为: http://xxx/Home的。

             正解:

             

    // 在Home.vue中调用
    
    mounted(){
        this.getTk()
      },

    坑点四:正式公众号认证过后才有这个功能哦!!!

    坑点五: 前端通过ajax将url传到后台签名,前端需要用js获取当前页面除去'#'hash部分的链接(可用location.href.split('#')[0]获取,而且需要encodeURIComponent),因为页面一旦分享,微信客户端会在你的链接末尾加入其它参数,如果不是动态获取当前链接,将导致分享后的页面签名失败。

                    所以,正确的姿势是: encodeURIComponent(location.href.split('#')[0])

    2019-06-17 更新:  ① 传给后端的url :encodeURIComponent(location.href.split('#')[0])  ;如果后端是 php的 easyWechat 完全没有问题运行正常。

                                    ② 若后端是 python的  wechatpy ,坚决不能加 encodeURIComponent ,否则一直报  invalid signature 。直接: location.href.split('#')[0] 就可以了。

    继续总结:

            api的使用 参照:http://demo.open.weixin.qq.com/jssdk/sample.zip    。F12你懂的

            最新版的:  updateAppMessageShareData , updateTimelineShareData  不好使。大坑

            先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。

            服务器获取token, 需要配置 公众号->开发->基本设置->ip白名单。 (不进行二次开发,可以不 配置/开启 服务器)

  • 相关阅读:
    模块三
    python的6种基本数据类型--字典
    python的6种基本数据类型--集合
    数据集之集合
    锚点使用
    JSON返回DateTime/Date('123123123')/解决办法
    JSON返回DateTime/Date('123123123')/解决办法
    设计模式-系列索引
    设计模式-系列索引
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
  • 原文地址:https://www.cnblogs.com/Mvloveyouforever/p/10074031.html
Copyright © 2011-2022 走看看