微信开发者平台获取ticket_微信开发平台 获取ticket - CSDN
  • java后台获取jsapi_ticket方法

                                    java获取微信jsapi_ticket

    首先要在公共账号中绑定域名,进入公共账号--设置


    设置js安全域名


    设置好以后就可以开始开发

    可以参照https://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html#.E9.99.84.E5.BD.951-JS-SDK.E4.BD.BF.E7.94.A8.E6.9D.83.E9.99.90.E7.AD.BE.E5.90.8D.E7.AE.97.E6.B3.95


    获取jsapi_ticket

    jsapi_ticket是公众号用于调用微信JS接口的临时票据。正常情况下,jsapi_ticket的有效期为7200秒,通过access_token来获取。由于获取jsapi_ticket的api调用次数非常有限,频繁刷新jsapi_ticket会导致api调用受限,影响自身业务,开发者必须在自己的服务全局缓存jsapi_ticket 


    在数据库中加入一张表专门用来存放/刷新jsapi_ticket用的,里面有失效时间 每次更新时间和失效时间相差10分钟(有效时间1小时50分钟) 保证在没有失效前就去刷新

    每次先去查看有没有未失效的jsapi_ticket  如果有就直接取到后去生成签名  
    如果没有则去请求access_token 用access_token在去请求jsapi_ticket

    上代码

    @Service
    public class JssdkService {
      private final	String appid = "公共账号id";
      private final	String secret = "公共账号secret";
    	@Autowired
    	private JssdkDao jssdkDao;
    //url为分享的url
    	public Jssdk getInfo(String url) {
    		Jssdk jssdk = jssdkDao.getInfo();
    		String jsapi_ticket="";
            if(jssdk==null||StringUtils.isEmpty(jssdk.getJsapiTicket())){
            	jsapi_ticket=getJsapiTicket();
            }else{
            	jsapi_ticket=jssdk.getJsapiTicket();
            }
            jssdk=getSign(url,jsapi_ticket); 
    		return jssdk;
    	}
    
    	private String getJsapiTicket(){
    		String requestUrl = "https://api.weixin.qq.com/cgi-bin/token?";
    		String params = "grant_type=client_credential&appid=" + appid + "&secret=" + secret + "";
    		String result = HttpRequestUtils.httpGet(requestUrl+params);
    		String access_token = JSONObject.parseObject(result).getString("access_token");
    		requestUrl = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?";
    		params = "access_token=" + access_token + "&type=jsapi";
    		result = HttpRequestUtils.httpGet(requestUrl+params);
    		String jsapi_ticket = JSONObject.parseObject(result).getString("ticket");
    		int activeTime=Integer.parseInt(JSONObject.parseObject(result).getString("expires_in"));
    		Jssdk jssdk = new Jssdk();
    		jssdk.setActiveTime(activeTime-600);
    		jssdk.setJsapiTicket(jsapi_ticket);
    		jssdkDao.update(jssdk);
    		return jsapi_ticket;
    	}
    	private Jssdk getSign(String url,String jsapi_ticket) {
    		String noncestr =  getNonceStr();
    		String timestamp =  getTimeStamp();
    		String sign = "jsapi_ticket=" + jsapi_ticket + "&noncestr=" + noncestr + "×tamp=" + timestamp + "&url=" + url;
    		sign = Sha1Util.getSha1(sign);
    		Jssdk jssdk = new Jssdk();
            jssdk.setAppid(appid);
            jssdk.setNoncestr(noncestr);
            jssdk.setTimestamp(timestamp);
            jssdk.setSign(sign);
    		return jssdk;
    	}
    private String getNonceStr() {
     Random random = new Random();
            return MD5Util.getMessageDigest(String.valueOf(random.nextInt(10000)).getBytes());
     }
    
     private String getTimeStamp() {
     return String.valueOf(System.currentTimeMillis() / 1000);
     
    }


    import java.io.IOException;
    import java.net.URLDecoder;
    
    import org.apache.http.HttpResponse;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.util.EntityUtils;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
     
    public class HttpRequestUtils {
        private static Logger logger = LoggerFactory.getLogger(HttpRequestUtils.class);    //日志记录
     
     
        /**
         * post请求
         * @param url         url地址
         * @return
         */
        public static String httpPost(String url){
            //post请求返回结果
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost method = new HttpPost(url);
            String str = "";
            try {
                HttpResponse result = httpClient.execute(method);
                url = URLDecoder.decode(url, "UTF-8");
                /**请求发送成功,并得到响应**/
                if (result.getStatusLine().getStatusCode() == 200) {
                    try {
                        /**读取服务器返回过来的json字符串数据**/
                        str = EntityUtils.toString(result.getEntity());
                    } catch (Exception e) {
                        logger.error("post请求提交失败:" + url, e);
                    }
                }
            } catch (IOException e) {
                logger.error("post请求提交失败:" + url, e);
            }
            return str;
        }
     
     
        /**
         * 发送get请求
         * @param url    路径
         * @return
         */
        public static String httpGet(String url){
            //get请求返回结果
        	 String strResult = null;
            try {
                DefaultHttpClient client = new DefaultHttpClient();
                //发送get请求
                HttpGet request = new HttpGet(url);
                HttpResponse response = client.execute(request);
     
                /**请求发送成功,并得到响应**/
                if (response.getStatusLine().getStatusCode() == org.apache.http.HttpStatus.SC_OK) {
                    /**读取服务器返回过来的json字符串数据**/
                      strResult = EntityUtils.toString(response.getEntity());
                } else {
                    logger.error("get请求提交失败:" + url);
                }
            } catch (IOException e) {
                logger.error("get请求提交失败:" + url, e);
            }
            return strResult;
        }
    }

    json解析可以用alibaba.fastjson也可以用别的工具

    展开全文
  • 微信开发者工具跨域 在终端配置open -a /Applications/微信web开发者工具.app --args --disable-web-security --user-data-dir 谷歌配置跨域。open -a /Applications/Google\ Chrome.app --args --disable-web-...

    微信开发者工具跨域 在终端配置open -a /Applications/微信web开发者工具.app --args --disable-web-security --user-data-dir

     

    谷歌配置跨域。open -a /Applications/Google\ Chrome.app --args --disable-web-security --user-data-dir

     

     

    但是必须谨记,必须先关掉谷歌和微信开发者工具,再在终端配置,否则没用。

    转载于:https://www.cnblogs.com/lhyforfront/p/6867683.html

    展开全文
  • 一、jsapi_ticket是什么?...由于获取jsapi_ticket的api调用次数非常有限,频繁刷新jsapi_ticket会导致api调用受限,影响自身业务,开发者必须在自己的服务全局缓存jsapi_ticket 。 二、注意事项 ...

    一、jsapi_ticket是什么?

    jsapi_ticket是公众号用于调用微信JS接口的临时票据。正常情况下,jsapi_ticket的有效期为7200秒,通过access_token来获取。由于获取jsapi_ticket的api调用次数非常有限,频繁刷新jsapi_ticket会导致api调用受限,影响自身业务,开发者必须在自己的服务全局缓存jsapi_ticket 。

    二、注意事项

    由于jsapi_ticket有效期为2小时,并且每天有实时调用量上限次数,所以最好开发的时候最好把jsapi_ticket存储起来,判断上次获取的jsapi_ticket是否有效,如果有效,就需要再次发起请求去获取jsapi_ticket了。

    存储jsapi_ticket有2种方式

    1. 存储在内存中(本文介绍这种方式,只适用于部署单点项目,部署多点项目会造成jsapi_ticket错误)
    2. 存储在数据库中

    三、多类型是什么?

    前一阵子做了卡券的项目,发现获取jsapi_ticket的地址是不同的,在这里面做下说明,省的大家开发时遇到麻烦

    正常获取jsapi_ticket的url地址(type为jsapi):

    https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi

    微信卡券获取jsapi_ticket的url地址(type为wx_card):

    https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=wx_card

    四、代码实例

    JsApiTicketUtils 

    下文代码中使用的获取token在微信公众号获取普通access_token

    /**
     * jsapi_ticket是公众号用于调用微信JS接口的临时票据
     * jsapi_ticket的每天有调用限额
     * 长期存储jsapi_ticket
     * */
    public class JsApiTicketUtils {
        private static Logger log = LoggerFactory.getLogger(JsApiTicketUtils.class);
        private static Map<String, String> jsApiTicketMap = new HashMap<>();
    	private final static String JSAPI_TICKET = "jsapi";//jsapi_ticket
    	private final static String WX_CARD_JSAPI_TICKET = "wx_card";//微信卡券jsapi_ticket
    
    	/**
     	* 获取jsapi_ticket
     	*/
    	public static Map<String, String> getJsApiTicket() {
            String time = jsApiTicketMap.get("jsapi_ticket_time");
            String jsApiTicket = jsApiTicketMap.get("jsapi_ticket");
            Long nowDate = new Date().getTime();
            if (jsApiTicket != null && time != null && nowDate - Long.parseLong(time) < (1.5*60*60*1000)) {
                log.info("jsApiTicket存在,且没有超时,返回jsApiTicketMap");
                return jsApiTicketMap;
            }
            synchronized (JsApiTicketUtils.class) {
                if(jsApiTicket != null && time != null && nowDate - Long.parseLong(time) < (1.5*60*60*1000)) {
                    log.info("jsApiTicket存在,且没有超时,返回jsApiTicketMap");
                    return jsApiTicketMap;
            } 
            log.info("jsApiTicket超时,或者不存在,重新获取");
            try {
    			//获取accessToken
                String accessToken=WeiXinUtils.getAccessToken();
    			//根据accessToken获取jsapiTicket
    			String jsapiTicket = WeiXinUtils.getJsApiTicket(accessToken,JSAPI_TICKET);
                log.info("jsapi_ticket_time:"+nowDate);
                log.info("jsapi_ticket:"+jsapiTicket);
    			jsApiTicketMap.put("jsapi_ticket_time", nowDate + "");
    			jsApiTicketMap.put("jsapi_ticket", jsapiTicket); 
            } catch (Exception e) {
                log.error("微信服务器发生错误",e);
            }
    		return jsApiTicketMap;
        }
    
    	/**
     	* 获取jsapi_ticket(微信卡券)
     	*/
    	public static Map<String, String> getWxCardJsApiTicket() {
            String time = jsApiTicketMap.get("wx_card_jsapi_ticket_time");
            String jsApiTicket = jsApiTicketMap.get("wx_card_jsapi_ticket");
            Long nowDate = new Date().getTime();
            if (jsApiTicket != null && time != null && nowDate - Long.parseLong(time) < (1.5*60*60*1000)) {
                log.info("jsApiTicket存在,且没有超时,返回jsApiTicketMap");
                return jsApiTicketMap;
            }
            synchronized (JsApiTicketUtils.class) {
                if(jsApiTicket != null && time != null && nowDate - Long.parseLong(time) < (1.5*60*60*1000)) {
                    log.info("jsApiTicket存在,且没有超时,返回jsApiTicketMap");
                    return jsApiTicketMap;
            } 
            log.info("jsApiTicket超时,或者不存在,重新获取");
            try {
    			//获取accessToken
                String accessToken=WeiXinUtils.getAccessToken();
    			//根据accessToken获取jsapiTicket
    			String jsapiTicket = WeiXinUtils.getJsApiTicket(accessToken,WX_CARD_JSAPI_TICKET);
                log.info("wx_card_jsapi_ticket_time:"+nowDate);
                log.info("wx_card_jsapi_ticket:"+jsapiTicket);
    			jsApiTicketMap.put("wx_card_jsapi_ticket_time", nowDate + "");
    			jsApiTicketMap.put("wx_card_jsapi_ticket", jsapiTicket); 
            } catch (Exception e) {
                log.error("微信服务器发生错误",e);
            }
    		return jsApiTicketMap;
        }
    }

    WeiXinUtils

    下文代码中使用的UrlConUtil在Http请求UrlConUtil工具类

    /** 
     * jsapi_ticket是公众号用于调用微信JS接口的临时票据
     * */
    public static String getJsApiTicket(String accessToken, String type){
    	String jsApiTicket = "";
    	// 这个url链接地址和参数皆不能变
    	String url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token="+accessToken+"&type="+type;
    	try {
    		JSONObject jsonObject = UrlConUtil.httpsRequest(url, "GET", null);
    		logger.info("获取jsapi_ticket返回的json:"+jsonObject);
    		Long expiresIn = jsonObject.getLong("expires_in");
    		logger.info("微信获取的expires_in:"+expiresIn);
    		String ticket = jsonObject.getString("ticket");
    		logger.info("微信获取的ticket:"+ticket);
    	}catch (Exception e){
    		logger.debug("获取jsapi_ticket发生异常",e);
    	}
    	return jsApiTicket;
    }
    展开全文
  • 关注微信公众号获取tokenUrl的地址为 https://api.weixin.qq.com/cgi-bin/token 关注微信公众号获取ticket的地址为 https://api.weixin.qq.com/cgi-bin/ticket/getticket 不能获取手机号 方法太麻烦 /-+/-+/-+/-+/-+...

    关注微信公众号获取tokenUrl的地址为
    https://api.weixin.qq.com/cgi-bin/token
    关注微信公众号获取ticket的地址为
    https://api.weixin.qq.com/cgi-bin/ticket/getticket
    不能获取手机号 方法太麻烦
    先转到小程序 ,然后根据小程序获取出来 ,再跳转回来
    /-+/-+/-+/-+/-+/-+/-+/-+/-+/-+
    企业微信获取tokenUrl的地址为
    https://qyapi.weixin.qq.com/cgi-bin/gettoken
    企业微信获取tokenUrl的地址为
    https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket
    可以获取手机号
    后面还有 开发者编号和开发者密码

    展开全文
  • 微信的官方文档给的java代码,没有获取jsapi_ticket,代码如下: import java.util.UUID; import java.util.Map; import java.util.HashMap; import java.util.Formatter; import java.security.MessageDigest; ...
  • 微信web开发者工具 它是一个桌面应用,通过模拟微信客户端的表现,使得开发者可以使用这个工具方便地在 PC 或者 Mac 上进行开发和调试工作。 该工具界面主要由几大部分组成,如下图所示: ...
    ​微信web开发者工具
    

    它是一个桌面应用,通过模拟微信客户端的表现,使得开发者可以使用这个工具方便地在 PC 或者 Mac 上进行开发和调试工作。


    该工具界面主要由几大部分组成,如下图所示:


    具体的安装步骤(查看官方技术文档):

    https://mp.weixin.qq.com/wiki?id=mp1421141115&highline=jsapi_ticket


    成功按照官方文档的说法,一步一步进行配置之后:



       但是,这个开发者工具虽然是微信官方开发工具,但是毕竟是模拟器,现实情况的复杂会导致有些样式不兼容。例如vivo的微信客户端,显示总是错乱的(测试的同事发现的问题,她的手机可以还原场景,但是我的手机端是正常的)。所以,我们需要有针对性的在这款手机真机上调试,如何做呢?下面简要介绍如何利用微信开发者工具进行真机调试。

           相对于iOS移动端调试,Android移动端调试更丰富一点,所以以安卓为例,ios调试方式同Android调试中的“普通调试”。

    ①普通调试普通调试的步骤如下:


    步骤解释:

    第一步:选择无线网卡地址,默认即可,工具会自动查询你的无线网卡ip v4地址

    第二步:意思就是你的手机连接的网络要和第一步得到的ip v4在同一个网段内(什么是网段?看这里)。简单的做法就是把手机的网络和电脑的网络设置为同一个源(连接到同一个无线网上)

    第三步:这个步骤很清楚了,还有一个快捷的方式就是“下拉工具栏——长按无线连接图标”然后就可以直接进入到无线列表在做后续操作了。iOS操作如下:

    iOS: 设置 - 无线局域网 - 选中网络 - HTTP代理手动


    第四步:设置好上面步骤以后,重启微信,这可能是让微信重新检测目前的网络情况,然后打开你想调试的页面(注意,要先打开要调试的页面才可以开始调试)

    第五步:这个不在上面的说明里,但是需要说明下,打开调试的网页以后,在点击下面的开始调试按钮!

    如果你的操作正确,弹出框会是这样的:


    开始调试成功的话,会有浅绿色提示当前调试的页面地址

    如果你当前没有在微信打开调试页面或打开的本地页面地址错误,则会失败:


    提示你这并没有找到你要调试的页面

           请注意,如果你想调试本地开发的页面,需要你开启web服务,使用http://host<:port>的方式来访问,如果只是一个本地页面,是无法打开调试的,形如webstrom里面快捷打开的页面地址:http://localhost:63342/17-app-calculate/index.html 这个是无法调试的。需要你搭建WEB服务,使用类似于http://192.168.0.108:8090/17-app-calculate/ 这种url。(http://127.0.0.1:8090/17-app-calculate/ 这种写法也是无法调试的,因为微信根本打不开)。

    调试模式开启以后,我们就可以直接在手机上查看调试的结果或者修改东西:

    我选中这里,手机就会有类似于PC端选中的状态一样被选中


    扫描二维码

    前端胖籽




    版权说明

    内容来源于网络,版权归作者所有;

    图片来源于网络,如有侵权,请联系删除。


    展开全文
  • 使用C# .net开发微信公众号之获取Jsapi_Ticket jsapi_ticket 生成签名之前必须先了解一下jsapi_ticket,jsapi_ticket是公众号用于调用微信JS接口的临时票据。正常情况下,jsapi_ticket的有效期为7200秒,通过access_...
  • 微信 php 获取ticket

    2015-10-23 09:54:42
    ... charset=utf8'); define('TOKEN', 'youtoken'); // TOKEN define('APP_ID', 'youid'); // 开发者AppID,服务号可获取 define('APP_SECRET', 'youSECRET'); // 开发者AppSecret,服务号可获取
  • 微信开发者文档

    2019-01-12 10:54:37
    用户在关注与取消关注公众号时,微信会把这个事件推送到开发者填写的URL。方便开发者给用户下发欢迎消息或者做帐号的解绑。 微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总...
  • 开启回调模式后,企业可以配置需要获取的成员操作或者地理位置信息,当触发时企业微信会把对应的数据同步到企业的后台,企业后台也可以根据行为作出被动响应。 如果你希望像微信公众平台那样需要根据文字、图片或者...
  • 1、微信公众平台文档入口 微信公众平台入口地址:https://mp.weixin.qq.com/,截图: 进入之后的文档地址: https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1445241432 2、微信网页授权 介绍:...
  • 微信公众平台jsapi开发教程1 jsapi_ticket获取
  • 后面发现原来微信将这功能隐藏在了ticket的生成接中,微信根据ticket在服务端存储匹配,并打开指定的网页,经过全方面测试发现,微信没有直接开放或者提供类似的api给到第三方平台或者开发者。 我们一个技术团队花...
  • 在这篇微信公众平台开发教程中,我们将介绍如何在网页中获取用户的地理位置信息。 本文分为以下二个部分: 生成JS-SDK权限验证签名使用地理位置接口获取坐标   一、微信JS-SDK 1. 获得Access Token access ...
  • using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Web.Security; using System.Web.Script.Serialization; using sohovan.com.wxapi;...namespace WX...
  • 本部分需要用到微信的JS-SDK,微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包。 通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照、选图、语音、位置等手机系统的能力,同时可以...
  • 很早之前做过微信开发平台相关的项目,由于开放平台的文档比较散乱,所以当时自己写了一些笔记,今天翻出来后稍稍修改了下拿出来给大家分享一下。以后应该会不定期更新微信或者其他方面的实用性的东西。 具体步骤...
  • 微信获取公众号文章就是指在第三方平台获取公众号作者写的文章。 一. 第三方开发需要到微信开放平台注册并且创建一个第三方平台应用 创建第三方平台时要填写很多资料,其中填写的回调地址需要记下来,等下要用到 ....
  • 微信开发 调试工具 测试工具 微信开发中,如果有调试和测试工具,事半功倍,分享给大家
  • 2019独角兽企业重金招聘Python工程师标准>>> ...
1 2 3 4 5 ... 20
收藏数 2,477
精华内容 990
关键字:

微信开发者平台获取ticket