美文网首页
2019-06-28 微信2次分享失败invalid signa

2019-06-28 微信2次分享失败invalid signa

作者: jinya2437 | 来源:发表于2019-06-28 15:43 被阅读0次

用户A进行微信分享用户B操作的链接:https://m.xxx.com.cn/goods/575

用户B再次微信分享给其它用户操作的链接:https://m.xxx.com.cn/goods/575?from=singlemessage&isappinstalled=0

发现链接追加2参数,这是微信那边统一处理,标识进行微信分享操作的;当再次分享的时候开启debug模式为true会报错invalid signature(无效签名)
解决办法直接贴代码:

前端:

share() {
        //关键点1: 分享出去的链接
        var shareLink = `${domain.buyer_wap}/goods/${this.goods_id}`
        this.shareParams = {
          title: this.goods.goods_name,
          desc: this.goods.goods_name,
          link: shareLink,
          imgUrl: this.galleryList[0].thumbnail
        }
        const uri = window.location.href
        if (this.MixinIsWeChatBrowser()) {
          //关键点2: 对url进行encode编码
          API_Share.wxShare({ url: encodeURIComponent(uri), type: 'WAP' }, this.shareParams).then(res => {
            this.$message.success('分享成功')
          }).catch(err => {
            this.$message.success('分享失败')
          })
        }
      },
export function wxShare(params, shareParams) {

  return new Promise(async (resolve, reject) => {
    let accessToken = Storage.getItem('access_token')
    try {
     
      request({ url: '/wechat/share', method: Method.GET, headers: { Authorization: accessToken } ,params }).then(res => {
        wx.config({
          debug: false, 
          appId: res.appid, 
          timestamp: res.timestamp, 
          nonceStr: res.nonceStr,
          signature: res.signature, 
          jsApiList: ['onMenuShareTimeline', 'onMenuShareAppMessage', 'onMenuShareQQ','onMenuShareWeibo'] 
        })
        
        wx.ready(() => {
          wx.onMenuShareTimeline({
            title: shareParams.title, 
            link: shareParams.link, // 分享链接,对应关键点1
            imgUrl: shareParams.imgUrl,
            success: (e) => {
              resolve()
            },
            cancel: () => { reject() }
          })
...

后台:

public Map signatureShare(String type,String url){
        Map<String, String> map = new HashMap<>(4);

        String nonceStr = StringUtil.getRandStr(16);
        String timestamp = Long.toString(DateUtil.getDateline());
        try {
            // 后端进行解码操作
            url = URLDecoder.decode(url,"utf-8");
            SignatureParams signatureParams = cache.get(WeixinSignaturer.SIGNATURE_PARAMS + type);
            if (signatureParams == null) {
                Map<String, String> config = getConfig(type);

                signatureParams = new SignatureParams();
                signatureParams.setWechatAccessToken(this.getAccessToken(config.get("app_id"), config.get("app_key")));
                signatureParams.setWechatJsapiTicket(getJsapiTicket(signatureParams.getWechatAccessToken().getAccessToken()));
                signatureParams.setAppId(config.get("app_id"));
            
                cache.put(SIGNATURE_PARAMS + type, signatureParams, signatureParams.getWechatJsapiTicket().getExpires() - 10);
            }
            StringBuffer stringBuffer = new StringBuffer("jsapi_ticket=");
            stringBuffer.append(signatureParams.getWechatJsapiTicket().getJsapiTicket() + "&");
            stringBuffer.append("noncestr=");
            stringBuffer.append(nonceStr + "&");
            stringBuffer.append("timestamp=");
            stringBuffer.append(timestamp + "&");
            stringBuffer.append("url=");
            stringBuffer.append(url);
            if (logger.isDebugEnabled()) {
                logger.debug("签名参数:" + stringBuffer.toString());
            }
            map.put("timestamp", timestamp);
            map.put("nonceStr", nonceStr);
            map.put("signature", SHA1.encode(stringBuffer.toString()));
            map.put("appid", signatureParams.getAppId());
            if (logger.isDebugEnabled()) {
                logger.debug("map参数:" + map);
            }
        } catch (WeixinSignatrueExceprion e) {
            logger.debug("未开启签名配置2");
            e.printStackTrace();
            throw e;
        } catch (Exception e) {
            e.printStackTrace();
            throw new WeixinSignatrueExceprion("微信签名异常错误");
        }
        return map;
    }

相关文章

网友评论

      本文标题:2019-06-28 微信2次分享失败invalid signa

      本文链接:https://www.haomeiwen.com/subject/qpgscctx.html