微信朋友圈分享接口使用总结

微信朋友圈分享接口使用总结微信朋友圈分享接口是非常细节的,而且不好调试,所以在此总结一下,以帮助大家首先应该遵循微信开发者文档介绍,用接口调试工具将你需要的接口的权限确定一下(这里得去申请接口权限)?然后将这个网址用手机端微信打开测试一下接口是否可用?http://203.195.235.76/jssdk/在保证所有的接口可用的前提下,下面我们正式进入主题我用的是java的struts框架写的后台vartimestam

大家好,又见面了,我是你们的朋友全栈君。

微信朋友圈分享接口是非常细节的,而且不好调试,所以在此总结一下,以帮助大家
首先应该遵循微信开发者文档介绍,用接口调试工具将你需要的接口的权限确定一下(这里得去申请接口权限)?然后将这个网址用手机端微信打开测试一下接口是否可用?http://203.195.235.76/jssdk/

在保证所有的接口可用的前提下,下面我们正式进入主题我用的是java的struts框架写的后台

var timestamp = '<s:property value="timestamp" />';
var signature = '<s:property value="signature" />';
var inviteAddr = '<s:property value="inviteAddr"/>';
//首先我们得配置config
 wx.config({
        debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
        appId: "微信公众号", // 必填,公众号的唯一标识
        timestamp: timestamp, // 必填,生成签名的时间戳取当前时间
        nonceStr: 'TmqtI9LIZM4uGiY6MWYBN4GnthPx1QKUEERYoqR7Rt6', // 必填,生成签名的随机串,可以随便写
        signature: signature,// 必填,签名,见附录1
        jsApiList: [ 'checkJsApi',
                     'openLocation',
                     'getLocation',
                     'onMenuShareTimeline',
                     'onMenuShareAppMessage'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
    });

最重要的的就是签名,因为它联系着一下三个参数

signature = Common.setSignature(jsapi_ticket, Common.noncestr, timestamp, "http://" + url);

首先是jsapi_ticket的获取:

public static String getAccessToken(HttpServletRequest request) {       
String turl = String.format(
                "%s?grant_type=client_credential&appid=%s&secret=%s",
                Common.appUrl, Common.appID, Common.appSecret);
        HttpClient client = new DefaultHttpClient();
        HttpGet get = new HttpGet(turl);
        JsonParser jsonparer = new JsonParser();
        String result = null;
        try {
            HttpResponse res = client.execute(get);
            String responseContent = null;
            HttpEntity entity = res.getEntity();
            responseContent = EntityUtils.toString(entity, "UTF-8");
            JsonObject json = jsonparer.parse(responseContent)
                    .getAsJsonObject();
            if (res.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                if (json.get("errcode") != null) {
                } else {
                    result = json.get("access_token").getAsString();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            client.getConnectionManager().shutdown();
// if(null != request){ 
   
// Common.setSession(request, "access_token", result);
// }
            return result;
        }
    }

public static String getJsapiTicket(HttpServletRequest request) {
// String access_token = Common.getAccessToken(request);
        //得到AccessToken
        String access_token = getAccessToken(request);
        String url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token="
                + access_token + "&type=jsapi";

        HttpClient client = new DefaultHttpClient();
        HttpGet get = new HttpGet(url);
        JsonParser jsonparer = new JsonParser();
        String result = null;
        try {
            HttpResponse res = client.execute(get);
            String responseContent = null;
            HttpEntity entity = res.getEntity();
            responseContent = EntityUtils.toString(entity, "UTF-8");
            JsonObject json = jsonparer.parse(responseContent)
                    .getAsJsonObject();
            if (res.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                if (!json.get("errcode").toString().equals("0")) {
                    // {"errcode":40013,"errmsg":"invalid appid"}
                } else {
                    result = json.get("ticket").getAsString();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            client.getConnectionManager().shutdown();
            return result;
        }
    }
//名称是小写
timestamp = String.valueOf((new Date()).getTime() / 1000);

//随机串不说了

//url获取
    String url = request.getHeader("Host") + request.getRequestURI();//必须动态获取

如果签名对了,调试时就会弹出errorMsg:ok代表config正确。
后面的就简单了
在ready里面调用接口

wx.ready(function(){ 
   
         // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
        // 分享到朋友圈
        wx.onMenuShareTimeline({
            title: '', // 分享标题
            link: "点击后的地址", // 分享链接
            desc: "",
            imgUrl: "图片的url",
            trigger: function (res) { 
   
                // 不要尝试在trigger中使用ajax异步请求修改本次分享的内容,因为客户端分享操作是一个同步操作,这时候使用ajax的回包会还没有返回
                // alert('用户点击发送给朋友');
              },
              success: function (res) { 
   
                alert('已分享');
                window.location.href= "red_package_index?shareFlag=1";
              },
              cancel: function (res) { 
   
                 alert('已取消');
              },
              fail: function (res) { 
   
                 alert(JSON.stringify(res));
              }
            });
            });

总结都是很细节的东西,很容易错,务必看文档,有很多错误总结。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/138784.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java–String、StringBuilder及StringBuffer区别及性能对比

    Java–String、StringBuilder及StringBuffer区别及性能对比【学习背景】主要是想通过OpenJDK提供的JMH工具测试下String、StringBuilder及StringBuffer字符串拼接的效率如何~关于JMH的介绍及具体使用,我的这篇博文中有介绍:Java–☀️面试官:LinkedList真的比ArrayList添加元素快?❤️‍本文通过OpenJDKJMH带你揭开真相《⭐建议收藏⭐》当然,除了主要验证三者的字符串拼接效率之外,还会对三者做一些区别分析及常见面试问题总结,希望加深自己对这三者的认知,分享出来,也希望能帮助到有需要的小伙伴~

    2022年6月28日
    22
  • android线程间通信的几种方法_Android进程间和线程间通信方式

    android线程间通信的几种方法_Android进程间和线程间通信方式进程:是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。线程:是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一些在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。区别:(1)、一个程序至少有一个进程,一个进…

    2022年9月28日
    4
  • aardio界面库_aardio有什么用

    aardio界面库_aardio有什么用之前想写一个图形界面化工具,了解了MFC、Qt,最后选了PyQt4,毕竟自己对python比较了解一些。后来同事推荐了一个aardio工具,发现确实很简便,不用什么乱七八糟的配置,安装包只有5.5M,安装编译,使用也简单。但也有不好的地方,因为使用比较少,所以有很多问题没法找到答案,这也是新语言的一种必然的过程。Anyway,膜拜一下大神。aardio官方社区:http://bbs.aardio….

    2025年6月11日
    1
  • dsp28335复位电路_28335串口不能中断

    dsp28335复位电路_28335串口不能中断0前言本期实验目标:采用外部中断方式响应按键触发,实现LED电平反转。外部中断是DSP十分常用的功能,通常用来响应一些控制操作,比如判断按键是否按下,传感器是否接收到信号等等。那么通过该例程,大家则可以快速学会使用外部中断的功能!本节仍然将分为硬件部分、软件部分和实验展示三个方面进行介绍。1硬件部分DSP28335支持XINT1-XINT7和XNMI共8路外部中断源,其中中断源XINT1/2和XNMI可以设定为从GPIO端口A的任意一个管脚输入,即GPIO0-GPIO31。而XINT3/4/5/

    2025年9月26日
    4
  • 可能是史上最全的权限系统设计

    可能是史上最全的权限系统设计权限系统设计前言权限管理是所有后台系统的都会涉及的一个重要组成部分,主要目的是对不同的人访问资源进行权限的控制,避免因权限控制缺失或操作不当引发的风险问题,如操作错误,隐私数据泄露等问题。目前在

    2022年7月4日
    25
  • Linux Bash漏洞修复

    Linux Bash漏洞修复特别提醒:Linux官方已经给出最新解决方案,已经解决被绕过的bug,建议您尽快重新完成漏洞修补。openSUSE镜像已经给出修复方案了。【已确认被成功利用的软件及系统】所有安装GNUbash版本小于或者等于4.3的Linux操作系统。【漏洞描述】该漏洞源于你调用的bashshell之前创建的特殊的环境变量,这些变量可以包含代码,同时会被bash执行。【漏洞检测方法】漏洞检测命令:env-iX='(){(a)=>\’bash…

    2025年7月23日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号