Springbootは微信メッセージプッシュを実現し、javaは小プログラムプッシュを実現し、小プログラム端実現コードを含む

11296 ワード

最近は微信やウィジェットのプッシュ機能の開発が必要で、javaのバックグラウンドでプッシュを実現する必要があり、自分自身javaもウィジェットもやっているので、自分でウィジェットのテンプレートプッシュ機能を実現します.
実現構想.
  • 1ウィジェットはユーザopenidを取得し、収集formidはjavaバックグラウンド
  • に伝達する.
  • 2 javaは、指定するウィジェットユーザ
  • にメッセージをプッシュする.
    いつものルールでは、まず効果図を見ます.
    私のこれはランニングマンのプッシュで、ユーザーが新しく注文したとき、ランニングマンにメッセージをプッシュします.
    実装手順について説明します
    一、微信小プログラム管理バックグラウンド開通モデルプッシュ
    ここのテンプレートidはとても重要で、次に私たちが送ったのはすべてこのテンプレートです.
    二、javaバックグラウンドのプッシュを実現するために必要なフィールド
  • 1微信公式プッシュメッセージを見るために必要なフィールド
  • 2に公式の説明がありました.私のドアはこれから公式に必要なこれらのフィールドを手に入れて、要求データを組み立てることができます.

  • 三、次に実現手順を説明する
    私のjavaバックグラウンドはspringbootに基づいて開発されています.spring bootを知らない場合は、springbootを理解してから帰ってから勉強することをお勧めします.また、RestTemplateはjavaバックグラウンドでgetとpostリクエストを行うために必要です.私たちは微信サーバーとインタラクティブにRestTemplateを使用しています.
  • 1まず公式プッシュに必要なフィールドに基づいてjava-beanを組み立てるここでは2つのjavabean
  • を用いる.
    /*
    *          
    * qcl   :2501902696
    * */
    @Data
    public class WxMssVo {
        private String touser;//  openid
        private String template_id;//  id
        private String page = "index";//         
        private String form_id;//      formid
        private String emphasis_keyword = "keyword1.DATA";//        
        private Map data;//    
    }
    
    /*
    *           
    * qcl   :2501902696
    * */
    @Data
    public class TemplateData {
        //keyword1:    ,keyword2:    ,keyword3:    ,keyword4:    ,keyword5  
        private String value;//,,     
    //    private String color;//    (       ,      )
    }
    

    ここまでプッシュを要求したデータが組み立てられているので、解いてプッシュ機能を実現します.いいえ、もう一つ重要なフィールドがあります.access_token
    access_tokenの取得
    /*
        *   access_token
        * appid appsecret        ,                  
        * */
        public String getAccess_token(String appid, String appsecret) {
            //  access_token
            String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential" +
                    "&appid=" + appid + "&secret=" + appsecret;
            String json = restTemplate.getForObject(url, String.class);
            AccessToken accessToken = new Gson().fromJson(json, AccessToken.class);
            return accessToken.getAccess_token();
        }
    

    今回は本格的に微信サーバにメッセージ配信を依頼できるようになりました
    /*
        *            
        * */
        public String pushOneUser(String openid, String formid) {
    
    
            //  access_token
            String access_token = getAccess_token(ConstantUtils.SCHOOL_APPID, ConstantUtils.SCHOOL_APPSECRET);
            String url = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send" +
                    "?access_token=" + access_token;
    
            //       
            WxMssVo wxMssVo = new WxMssVo();
            wxMssVo.setTouser(openid);//  openid
            wxMssVo.setTemplate_id("LzeDP0G5PLgHoOjCMfhu44wfUluhW11Zeezu3r_dC24");//  id
            wxMssVo.setForm_id(formid);//formid
    
    
            Map m = new HashMap<>(5);
    
            //keyword1:    ,keyword2:    ,keyword3:    ,keyword4:    ,keyword5  
            TemplateData keyword1 = new TemplateData();
            keyword1.setValue("      ");
            m.put("keyword1", keyword1);
    
            TemplateData keyword2 = new TemplateData();
            keyword2.setValue("         ");
            m.put("keyword2", keyword2);
            wxMssVo.setData(m);
    
            TemplateData keyword3 = new TemplateData();
            keyword3.setValue("       ");
            m.put("keyword3", keyword3);
            wxMssVo.setData(m);
    
            TemplateData keyword4 = new TemplateData();
            keyword4.setValue("       ");
            m.put("keyword4", keyword4);
            wxMssVo.setData(m);
    
            TemplateData keyword5 = new TemplateData();
            keyword5.setValue("     ");
            m.put("keyword5", keyword5);
            wxMssVo.setData(m);
    
            ResponseEntity responseEntity =
                    restTemplate.postForEntity(url, wxMssVo, String.class);
            log.error("       ={}", responseEntity.getBody());
            return responseEntity.getBody();
        }
    

    Openidは、小さなプログラム開発者に伝えたり、自分で取得したりすることができます.formidは小さなプログラム開発が必要です.formidをデータベースに保存して、いつ直接取り出す必要がありますか.注意:formidはユーザーopenidに対応する必要があります.
    以下に完全なコードを貼り付けます
    package com.qcl.paotuischool.wechat;
    
    import com.google.gson.Gson;
    import com.qcl.userwechat.bean.AccessToken;
    import com.qcl.utils.ConstantUtils;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.http.ResponseEntity;
    import org.springframework.stereotype.Service;
    import org.springframework.web.client.RestTemplate;
    
    import java.util.HashMap;
    import java.util.Map;
    
    import lombok.extern.slf4j.Slf4j;
    
    /**
     * Created by qcl on 2018/9/11.
     *          ,
     *     access_token   
     */
    @Service
    @Slf4j
    public class WxPushServiceQcl {
        //       get post
        @Autowired
        private RestTemplate restTemplate;
    
    
        /*
        *            
        * */
        public String pushOneUser(String openid, String formid) {
    
    
            //  access_token
            String access_token = getAccess_token(ConstantUtils.SCHOOL_APPID, ConstantUtils.SCHOOL_APPSECRET);
            String url = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send" +
                    "?access_token=" + access_token;
    
            //       
            WxMssVo wxMssVo = new WxMssVo();
            wxMssVo.setTouser(openid);//  openid
            wxMssVo.setTemplate_id("LzeDP0G5PLgHoOjCMfhu44wfUluhW11Zeezu3r_dC24");//  id
            wxMssVo.setForm_id(formid);//formid
    
    
            Map m = new HashMap<>(5);
    
            //keyword1:    ,keyword2:    ,keyword3:    ,keyword4:    ,keyword5  
            TemplateData keyword1 = new TemplateData();
            keyword1.setValue("      ");
            m.put("keyword1", keyword1);
    
            TemplateData keyword2 = new TemplateData();
            keyword2.setValue("         ");
            m.put("keyword2", keyword2);
            wxMssVo.setData(m);
    
            TemplateData keyword3 = new TemplateData();
            keyword3.setValue("       ");
            m.put("keyword3", keyword3);
            wxMssVo.setData(m);
    
            TemplateData keyword4 = new TemplateData();
            keyword4.setValue("       ");
            m.put("keyword4", keyword4);
            wxMssVo.setData(m);
    
            TemplateData keyword5 = new TemplateData();
            keyword5.setValue("     ");
            m.put("keyword5", keyword5);
            wxMssVo.setData(m);
    
            ResponseEntity responseEntity =
                    restTemplate.postForEntity(url, wxMssVo, String.class);
            log.error("       ={}", responseEntity.getBody());
            return responseEntity.getBody();
        }
    
        /*
        *   access_token
        * appid appsecret        ,                  
        * */
        public String getAccess_token(String appid, String appsecret) {
            //  access_token
            String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential" +
                    "&appid=" + appid + "&secret=" + appsecret;
            String json = restTemplate.getForObject(url, String.class);
            AccessToken accessToken = new Gson().fromJson(json, AccessToken.class);
            return accessToken.getAccess_token();
        }
    
    }
    

    WxPushServiceQclクラスのpushOneUserメソッドをプッシュする必要がある場所で呼び出し、openid、formidパラメータを入力します.これは私がプッシュに成功して印刷したロゴです.
    次に、小さなプログラム開発には何が必要ですか.
    我々のformidの有効期間は7日間であり、form_idは一度しか使えないので、私たちの小さなプログラム側がしなければならないのは、できるだけformidを多く持って、バックグラウンドに伝えて、バックグラウンドをデータベースに保存して、このように7日間の有効期間内に、どのように使いたいのかを伝えることです.
    だから次にお話しするのは、小さなプログラム開発がどのようにしてformidをできるだけ多く手に入れたのかということです.
    公式に提供されているのは、フォームの提出時にreport-submitをtrueに設定した場合にのみformidがもらえます.例えば、
     
    'true' >

    だから私たちはここで工夫しなければなりません.formコンポーネントでしか入手できない以上、私たちの小さなプログラムで最も多くの場所をformで偽装することができますか.私の小さいプログラムはランニングの小さいプログラムで、ニュースも主にランニングマンにプッシュして、ランニングマンが最もクリックするのはこの2つの項目です.だから私たちはfromコンポーネントでこの2つの項目を偽装して、ユーザーがクリックすると同時に使用するformidを集めることができます.
     'button_item'>
      
    "form_item" bindsubmit='gorRunnerLobby' report-submit='true' data-type="1">
    'right_arrow' />

    これにより、ユーザがエントリをクリックすると、ユーザformidが収集されます.上のbottonにはデフォルトスタイルがあるので、cssを変更することでbottonデフォルトスタイルを除去します.
    .button_item {
     width: 100%;
     display: flex;
     flex-direction: row;
     align-items: center;
     padding: 2px 20px;
     background: white;
     border-bottom: 1px solid gainsboro;
    }
    /*         botton     */
    .button {
     width: 100%;
     background: white;
     border: none;
     text-align: left;
     padding: 6px 0px;
     margin: 0px;
     line-height: 1.5;
    }
    
    /*         botton   */
    .button::after {
     border: none;
    }
    
    /*  button    formid */
    
    .form_item {
     width: 100%;
    }
    

    ここまで来て、私たちの小さなプログラムも円満に自分の任務を完成しました.
    知識点を補う.
  • ウィジェット開発ユーザーopenid
  • の取得方法
    これによりjavaバックグラウンドとウィジェット開発は、微信ウィジェットのメッセージプッシュ機能を楽しく完成させることができます.
    Javaまたはウィジェットに関する問題があれば、私の微信交流学習2501902696(注釈ウィジェットまたはjava)を加えることができます.
    転載先:https://juejin.im/post/5b9760375188255c54428e8c