1. 程式人生 > >微信公眾號獲取素材介面呼叫次數限制的解決辦法

微信公眾號獲取素材介面呼叫次數限制的解決辦法

問題描述:微信公眾號開發 之前每次推送訊息都需要呼叫素材介面,但獲取素材介面每天都有次數限制
解決辦法:
1.設定定時器 +單例模式
每分鐘更新一次素材資訊,將素材資訊付給單例物件屬性(成員)。
定時器:
applicationContext-configuration.xml

   <bean id="matetialTask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject"
ref="wx_job" /> <property name="targetMethod" value="updateMatetialPro" /> <property name="concurrent" value="false" /> </bean> <bean id="matetialTask_Time" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail"
ref="matetialTask" /> <property name="cronExpression" value="0 0/1 * * * ? *" /> </bean> <bean id="schdulerFactory" lazy-init="false" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref
bean="stat_cronTrigger" /> <ref bean="job_cronTrigger" /> <ref bean="order_cronTrigger" /> <ref bean="wx_cronTrigger" /> <ref bean="matetialTask_Time" /> </list> </property> </bean>

WxManageAction.java

@Component("wx_job")
public class WxManageAction {
    @Autowired
    private SchedulerFactoryBean schedulerFactory;
    @Autowired
    private IWxTaskService wxTaskService;
    @Autowired
    private WxLoginUtil wxLoginUtil;

    public WxManageAction() {
    }
    public WxManageAction(SchedulerFactoryBean schedulerFactory) {
        this.schedulerFactory = schedulerFactory;
    }
    public void accessToken() {
        System.out.println("更新微信access_token,每小時執行一次:"+new Date());
    /*  WxTask wxTask = this.wxTaskService.getObjByProperty( "name", "access_token");
        String ac=this.wxLoginUtil.getAccess_token();
        wxTask.setValue(ac);
        this.wxTaskService.update(wxTask);*/
    }
    public void updateMatetialPro() {
        System.out.println("更新微信素材,每分鐘執行一次:"+new Date());
        //更新
        WxTask wxTask = this.wxTaskService.getObjByProperty( "name", "access_token");
        String ACCESS_TOKEN=wxTask.getValue();
        Matetial.setImage(getmaterial(ACCESS_TOKEN,"image"));
        Matetial.setNews(getmaterial(ACCESS_TOKEN,"news"));
    }

    //獲取微信公眾號線上素材列表
    public JSONObject getmaterial(String ACCESS_TOKEN, String TYPE){
        String url = "https://api.weixin.qq.com/cgi-bin/material/batchget_material?access_token=" +ACCESS_TOKEN;
        String jsonStr ="{\"type\":\""+TYPE+"\",\"offset\":0,\"count\":20}";
        String response = WxLoginUtil.sendPost(jsonStr, url);
        JSONObject jsonObject = JSONObject.fromObject(response);
        System.out.println("獲取"+TYPE+"素材列表:"+jsonObject);
        return jsonObject;
    }

}

單例模式:

public class Matetial {
    private static JSONObject news=null;
    private static JSONObject image=null;


    public static void setNews(JSONObject news) {
        Matetial.news = news;
    }
    public static JSONObject getNews() {
        return news;
    }

    public static void setImage(JSONObject image) {
        Matetial.image = image;
    }
    public static JSONObject getImage() {
        return image;
    }


    private Matetial() {}
    private static final  Matetial matetial=new Matetial();

    //靜態工廠方法
    public static Matetial getMatetial() {
        return matetial;
    }

}

單例模式測試:

public class MatetialTest {
    public static void main(String[] args) {

        //單例模式測試
        Matetial matetial= Matetial.getMatetial();
        String jsonString = "{\"message\":\"ok\",\"status\":\"1\",\"state\":\"3\",\"data\":[{\"time\":\"2012-07-07 13:35:14\",\"context\":\"客戶已簽收\"},{\"time\":\"2012-07-07 09:10:10\",\"context\":\"離開 [北京石景山營業廳] 派送中,遞送員[],電話[]\"},{\"time\":\"2012-07-06 19:46:38\",\"context\":\"到達 [北京石景山營業廳]\"},{\"time\":\"2012-07-06 15:22:32\",\"context\":\"離開 [北京石景山營業廳] 派送中,遞送員[],電話[]\"},{\"time\":\"2012-07-06 15:05:00\",\"context\":\"到達 [北京石景山營業廳]\"},{\"time\":\"2012-07-06 13:37:52\",\"context\":\"離開 [北京_同城中轉站] 發往 [北京石景山營業廳]\"},{\"time\":\"2012-07-06 12:54:41\",\"context\":\"到達 [北京_同城中轉站]\"},{\"time\":\"2012-07-06 11:11:03\",\"context\":\"離開 [北京運轉中心駐站班組] 發往 [北京_同城中轉站]\"},{\"time\":\"2012-07-06 10:43:21\",\"context\":\"到達 [北京運轉中心駐站班組]\"},{\"time\":\"2012-07-05 21:18:53\",\"context\":\"離開 [福建_廈門支公司] 發往 [北京運轉中心_航空]\"},{\"time\":\"2012-07-05 20:07:27\",\"context\":\"已取件,到達 [福建_廈門支公司]\"}]}";
        JSONObject json = JSONObject.fromObject(jsonString);
        matetial.setImage(json);
        Matetial matetial1=Matetial.getMatetial();
        //matetial1.setImage("1a");
        System.out.println(matetial.getImage());
        System.out.println(matetial1.getImage());
        System.out.println(Matetial.getImage());

    }
}

2.使用素材時 直接呼叫單例物件屬性
WechatService.java

 JSONObject jo=Matetial.getNews();

相關推薦

公眾獲取素材介面呼叫次數限制解決辦法

問題描述:微信公眾號開發 之前每次推送訊息都需要呼叫素材介面,但獲取素材介面每天都有次數限制 解決辦法: 1.設定定時器 +單例模式 每分鐘更新一次素材資訊,將素材資訊付給單例物件屬性(成員)。 定時器: applicationContext-conf

vue.js中公眾中支付寶支付失敗bug解決辦法

微信公眾號中呼叫支付寶支付需要在瀏覽器中開啟支付連結然後呼叫支付才可以。具體方法:1、檔案 2、 我們使用的是post方法提交。下面是在vue.js中使用的方法總結1、建立alipay頁面路由,調起瀏覽器支付提示頁面。(樣式太多,省略)<template>  &l

呼叫公眾現金紅包介面給使用者傳送紅包

紅包功能簡單介紹: 1、商戶呼叫介面時,通過指定傳送物件以及傳送金額的方式發放紅包,這樣的方式,允許商戶靈活的應用於各種各樣豐富的活動場景 2、領取到紅包後,使用者的資金直接進入微信零錢,避免繁複的領獎流程,帶給使用者微信支付原生的流暢體驗 現金紅包官網文件地址:h

asp公眾獲取用戶地址息源碼,可以獲取省市縣及坐標

menu menus ont LIDS gcj02 地址 上傳 make ret ============================================= 互相學習電話微信:18611436777(加微信註明事由) <!--#include fi

asp源碼公眾獲取用戶基本息(PC端)

emp edi com diff oauth2 request amp func write blic Function Get_Access_Token() sCode = Request("code") If sCode ="" And Session(

asp源碼公眾獲取用戶列表

req info alt cti The tps () ima serve Public Function Get_url() SCRIPT_NAME = CStr(Request.ServerVariables("SCRIPT_NAME")) S

asp源碼公眾獲取用戶基本息手機端

pen city ams ati obj 信息 產生 data end ‘獲取用戶基本信息(UnionID機制) ‘在關註者與公眾號產生消息交互後,公眾號可獲得關註者的OpenID(加密後的微信號,每個用戶對每個公眾號的OpenID是唯一的。對於不同公眾號,同一用戶

公眾獲取帶引數的二維碼

    public void publicQR(             HttpServletResponse response,HttpServletRequest requ

公眾獲取信使用者資訊

注:  這裡獲取使用者資訊方式和網頁授權獲取使用者資訊方式不同。兩個access_token不同,返回的結果也不同。 我們很多場景可能需要使用者資訊   微信公眾號獲取微信使用者資訊需要的條件:     1.獲取使用者openId。可以在使用者繫結

公眾獲取臨時二維碼

  我們做微信公眾號開發時為了推廣,可能需要服務端去生成公眾號的臨時二維碼,然後再進行一定的圖片合成操作,製作一張漂亮的推廣海報。別人掃一下二維碼進入關注公眾號介面,點選關注我們可以拿到二維碼裡面的資訊官網地址   記錄一下獲取臨時二維碼操作過程。   1.獲取

PHP公眾,獲取使用者地理位置 定位 經緯度

<?php //php外掛下載地址: https://files.cnblogs.com/files/fan-bk/jssdk_php.rar //建立一個php檔案 require_once "jssdk_php/jssdk.php"; //引入下載的PHP外掛 $jssdk =

公眾獲取access_token 定時重新整理

微信官方文件:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140183 根據文件,首先需要將伺服器IP地址新增到IP白名單中,才能獲取。另外access_token的有效期為2個小時,需定時重新整理,並

公眾獲取二維碼

<?php /** * Created by PhpStorm. * User: zhoujianhui * Date: 2018/9/17 * Time: 下午4:30 */ //獲取token header('content-type:text/html;

java對接公眾獲取使用者基本資訊

package com.xcd.zc.controller; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.databind.JsonMappingExc

公眾獲取使用者地理位置

很久沒搞微信的js-sdk了, 搞了一下午, 重新整理頁面老是失敗, 沒想到結合經驗給大家展示下獲取使用者地理位置 第一步:登入微信公眾號https://mp.weixin.qq.com 首先先設定最基本的配置(這一步大家應該都會)   第二步:點選公眾平臺右上角展開

公眾開發體驗介面

1.新建Module wechat 2.按照上篇文章,先成功接入微信介面 3.由於winxin4j使用redis進行快取Token,所以請先配置springboot+redis的整合,它的access_token每2小時變換一次。 1)啟動redis,連線radis 2)配置專案中

公眾獲取unionid

每個公眾號可以用openid作為唯一標識,但是在不同的公眾號,openid是不一樣的,如果一個公司有幾個公眾號,或者有一個公眾號,一個小程式,openid不一樣,怎麼統一資料呢? 微信官方提供了unionid,在同一個賬號主體下,unionid是一樣的,前提是需要在開放平臺

公眾客服介面給指定使用者openid傳送訊息

微信開發文件: 客服介面-發訊息 介面呼叫請求說明 http請求方式: POST https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=ACCESS_TOKEN 各訊息型別所需的

公眾獲取OpenId(使用者授權)(無需關注公眾)以及獲取使用者基本資訊

上一個部落格也寫了微信公眾號獲取OpenId,但是現在這個和上一個有什麼區別呢。 其實呢,是差不多的,只是這個是通過使用者授權。 但是,又會有人問了,明明可以未授權獲取到使用者的openId,那我為什麼要讓使用者進行授權呢,我偷偷的獲取不就好了嗎? 好像很有道理,但是呢,

公眾獲取未關注的使用者基本資訊資訊(已關注或者未關注都可以)

1、根據公眾號的appid獲取code $APPID=APPID;//公眾號在微信的appid $REDIRECT_URI='http://www.ific.cc/check.ph