博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
微信js分享第三方链接
阅读量:5901 次
发布时间:2019-06-19

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

  1. 公众号配置

  2. 后台接口

  3. 前端js

  4. 个别问题解决方法

 

 


 

1、公众号配置

  前提:公众号必须经过认证

  登录公众号 ------> 公众号配置 ------> 功能设置

  找到“JS接口安全域名”,配置域名(域名必须经过认证)

  具体规则如下

  【以百度域名为例,下面输入框中填写的就是www.baidu.com(不知道只写baidu.com能不能行)】

  【如果填写的指定路径,那么分享的页面需在此路径下】

  

 

2、后台接口

  控制层

  注:

  其中HttpUtils 中只使用了httpGet 来请求微信api接口

  RedisClient把token和ticket保存进redis,限制过期时间

  getSiteConfig仅仅用来获取appid和secrect

  加密的工具类在控制层的代码下面

  

package com.mingtai.yuqing.common.controller;import com.alibaba.fastjson.JSONObject;import com.mingtai.base.model.ApiResult;import com.mingtai.yuqing.common.redis.RedisClient;import com.mingtai.yuqing.common.util.HttpUtils;import com.mingtai.yuqing.plat.tenant.service.ITenantService;import org.apache.commons.lang.StringUtils;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import java.util.UUID;import static com.mingtai.yuqing.common.util.SHA1.SHA1;@RestController@RequestMapping("/wx/js/")public class WxJsConfigController {    @Autowired    private ITenantService tenantService;    private static final Integer siteId = 180;    private String token = null;    private String appId = null;    private String secret = null;    private String ticket = null;    /**     * 获取微信JS配置信息     * @param url     * @param datetime     * @return     * @throws Exception     */    @RequestMapping("getConfig")    public ApiResult getConfig(String url, String datetime) throws Exception {        String key = "wx.ticket." + this.siteId;        String nowTicket = RedisClient.get(key);        getSiteConfig();        if (StringUtils.isBlank(nowTicket)) {            getAccessToken();            getTicket(key);        } else {            this.ticket = nowTicket;        }        //随机字符串        String nonceStr = UUID.randomUUID().toString().replace("-", "").substring(0, 16);        //时间戳        String timestamp = datetime;        //生成内容        url = url + "&t=" + datetime;        String str = "jsapi_ticket=" + this.ticket + "&noncestr=" + nonceStr + "&timestamp=" + timestamp + "&url=" + url;        String signature = SHA1(str);        JSONObject jsonObject = new JSONObject();        jsonObject.put("appId", this.appId);        jsonObject.put("timestamp", timestamp);        jsonObject.put("nonceStr", nonceStr);        jsonObject.put("signature", signature);        return new ApiResult(jsonObject);    }    public void getAccessToken() throws Exception {        String key = "wx.token." + this.siteId;        String accessToken = RedisClient.get(key);        if (StringUtils.isBlank(accessToken)) {            String tokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";            tokenUrl = tokenUrl.replace("APPID", this.appId).replace("APPSECRET", this.secret);            String result = HttpUtils.doGet(tokenUrl);            JSONObject json = JSONObject.parseObject(result);            String newToken = json.getString("access_token");            Integer expireTime = json.getInteger("expires_in");            this.token = newToken;            RedisClient.set(key, newToken, expireTime - 10);        } else {            this.token = accessToken;        }    }    public void getTicket(String key) throws Exception {        String url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + this.token + "&type=jsapi";        String nowTicket = RedisClient.get(key);        String result = HttpUtils.doGet(url);        JSONObject json = JSONObject.parseObject(result);        nowTicket = json.getString("ticket");        Integer expireTime = json.getInteger("expires_in");        this.ticket = nowTicket;        RedisClient.set(key, nowTicket, expireTime - 10);    }    private void getSiteConfig() {        String allConfig = tenantService.getTenantById(this.siteId).getTeExpandField();        JSONObject jsonObject = JSONObject.parseObject(allConfig);        this.appId = jsonObject.getString("appId");        this.secret = jsonObject.getString("secret");    }}

  工具类

  

package com.mingtai.yuqing.common.util;import java.io.UnsupportedEncodingException;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;public class SHA1 {    public static String SHA1(String decript) throws UnsupportedEncodingException {        try {            MessageDigest digest = MessageDigest.getInstance("SHA-1");            digest.update(decript.getBytes("utf-8"));            byte messageDigest[] = digest.digest();            StringBuffer hexString = new StringBuffer();            //转为十六进制            for (int i = 0; i < messageDigest.length; i++) {                String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);                if (shaHex.length() < 2) {                    hexString.append(0);                }                hexString.append(shaHex);            }            return hexString.toString();        } catch (NoSuchAlgorithmException e) {            e.printStackTrace();        }        return "";    }}

 

3、前端JS

  注:需先调用wxJsConfig方法

//微信js配置    wxJsConfig: function (config) {        wx.config({            appId: config.appId,            timestamp: config.timestamp,            nonceStr: config.nonceStr,            signature: config.signature,            jsApiList: [                'updateAppMessageShareData',                'updateTimelineShareData',                'onMenuShareAppMessage',  //旧的接口,即将废弃                'onMenuShareTimeline' //旧的接口,即将废弃            ]        });    },    //微信分享    wxJsShare: function (data) {        //自定义“分享给朋友”及“分享到QQ”按钮的分享内容        wx.ready(function () {            wx.updateAppMessageShareData({                title: data.title,                desc: data.desc,                link: data.link,                imgUrl: data.imgUrl,                success: function () {                    console.log("自定义分享1");                }            });        });        //自定义“分享到朋友圈”及“分享到QQ空间”按钮的分享内容        wx.ready(function () {            wx.updateTimelineShareData({                title: data.title,                link: data.link,                imgUrl: data.imgUrl,                success: function () {                    console.log("自定义分享2");                }            });        });    }

 

4、个别问题解决方法

  注:只作补充,具体问题解决方法见官方JS文档----附录5

  (1)可以使用“微信开发者工具”来调试

  (2)“js-sdk 没有此SDK或暂不支持此SDK模拟”。

    微信开发者工具不支持此方法的调用,用手机上的微信是没问题的。

    例如:updateAppMessageShareData

转载于:https://www.cnblogs.com/ys382815832/p/10826960.html

你可能感兴趣的文章
算法分析与设计——贪心法实验报告
查看>>
js时间戳与日期格式的相互转换
查看>>
POJ - 1062 昂贵的聘礼(Dijkstra)
查看>>
Java多态和动态绑定是如何实现的
查看>>
sql server 下载安装标记
查看>>
Android学习6—单元测试的使用
查看>>
js运算符(运算符的结合性)
查看>>
最长上升子序列问题
查看>>
C#中的析构函数
查看>>
Python基础—基础数据类型list(Day4)
查看>>
idea 编译级别的设置
查看>>
javascript系列-class9.DOM(上)
查看>>
vue-resource改造品牌列表案例
查看>>
内置对象Array的原型对象中添加方法
查看>>
12行代码的相关节点
查看>>
activemq的几种基本通信方式总结
查看>>
PLSQL 中异常处理
查看>>
Android事件总线(一)EventBus3.0用法全解析
查看>>
log4j使用细节
查看>>
5月8下午
查看>>