精华内容
下载资源
问答
  • /*** 模版消息结构* @author why**/public class Template {private String touser;//接收人的openIdprivate String template_id;//模版idprivate String url;//点击模版访问urlprivate String topcolor;//消息头部...

    /**

    * 模版消息结构

    * @author why

    *

    */

    public class Template {

    private String touser;//接收人的openId

    private String template_id;//模版id

    private String url;//点击模版访问url

    private String topcolor;//消息头部颜色

    private Map data;//消息内容

    public Template() {

    super();

    }

    public Template(String touser, String template_id, String url,

    String topcolor, Map data) {

    super();

    this.touser = touser;

    this.template_id = template_id;

    this.url = url;

    this.topcolor = topcolor;

    this.data = data;

    }

    public String getTouser() {

    return touser;

    }

    public void setTouser(String touser) {

    this.touser = touser;

    }

    public String getTemplate_id() {

    return template_id;

    }

    public void setTemplate_id(String template_id) {

    this.template_id = template_id;

    }

    public String getUrl() {

    return url;

    }

    public void setUrl(String url) {

    this.url = url;

    }

    public String getTopcolor() {

    return topcolor;

    }

    public void setTopcolor(String topcolor) {

    this.topcolor = topcolor;

    }

    public Map getData() {

    return data;

    }

    public void setData(Map data) {

    this.data = data;

    }

    }/**

    * 创建模板消息

    * @param openId

    * @param template_id

    * @param url

    * @param topcolor

    * @param carrierName

    * @param waybillCode

    * @param waybillDesc

    * @return

    */

    public static String makeRouteMessage(String openId,String template_id,String url,String topcolor,String carrierName, String waybillCode, String waybillDesc){

    Template template = new Template();

    template.setTouser(openId);

    template.setTemplate_id(template_id);

    template.setUrl(url);

    template.setTopcolor(topcolor);

    Map data = new HashMap();

    data.put("first", new TemplateData(carrierName+"\n","#ff6600"));

    data.put("waybillNo", new TemplateData(waybillCode+"\n","#ff6600"));

    data.put("remark", new TemplateData(waybillDesc,"#ff6600"));

    template.setData(data);

    JSONObject jsonObject = JSONObject.fromObject(template);

    System.out.println(template);

    return jsonObject+"";

    }

    /**

    * 发送消息

    * @param accessToken

    * @param jsonMsg

    * @return

    */

    public static boolean sendTemplateMessage(String accessToken, String jsonMsg){

    logger.info("消息内容:{"+jsonMsg+"}");

    boolean result = false;

    //请求地址

    String requestUrl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN";

    requestUrl = requestUrl.replace("ACCESS_TOKEN", accessToken);

    //发送模板消息

    JSONObject jsonObject = WeixinUtil.httpRequest(requestUrl, "POST", jsonMsg);

    if(null != jsonObject){

    int errorCode = jsonObject.getInt("errcode");

    String errorMsg = jsonObject.getString("errmsg");

    if(0 == errorCode){

    result = true;

    logger.info("模板消息发送成功errorCode:{"+errorCode+"},errmsg:{"+errorMsg+"}");

    System.out.println("模板消息发送成功errorCode:{"+errorCode+"},errmsg:{"+errorMsg+"}");

    }else{

    logger.info("模板消息发送失败errorCode:{"+errorCode+"},errmsg:{"+errorMsg+"}");

    System.out.println("模板消息发送失败errorCode:{"+errorCode+"},errmsg:{"+errorMsg+"}");

    }

    }

    return result;

    }

    展开全文
  • 最近一个微信开发的项目里需要发送微信模板消息给卖家或者供应商等,微信开发其实也就按照微信的官方接口要求组装起来即可,下面简单介绍一下我的微信模板发送代码。1.获取access token,至于access token是什么,...

    最近一个微信开发的项目里需要发送微信模板消息给卖家或者供应商等,微信开发其实也就按照微信的官方接口要求组装起来即可,下面简单介绍一下我的微信模板发送代码。

    1.获取access token,至于access token是什么,大家可以自行微信接口文档看一下,这边不多说

    获取access token我这边主要是用定时器没大概2分钟获取一次,每天获取的次数是100000次,用法如下:

    View Code

    2.定义消息主体内容,区分大小写(经过测试必须小写,java的风格)

    实体如下:

    View Code

    需要注意的是因为我们这边是内部调用不走soap协议,如果走soap协议, Dictionary是不能被二进制序列化的

    3.编写发送微信消息方法

    代码如下:

    1  public static string SendTempleteMessage(WeChatTemplatecsMsg messageInfo, string access_token) 2         { 3             try 4             { 5                 //临时测试脚本,正式使用将换成模板配置文件(等需求组确定模板之后) 6                 string jsonDataParams = messageInfo == null 7                     ? "" : SerializationEx.ToJson(messageInfo); 8                 string requestUrl = string.Format(ConfigBLL.URL_POSTTEMELETETEXTMESSAGE, access_token); 9                 return WebAPITransfer.Request(requestUrl,"POST", jsonDataParams);10             }11             catch (Exception ex)12             {13                 return ex.Message;14             }15         }

    主要就是将实体转为json,没什么难度

    4.定义xml配置文件

    因为刚刚上面那个实体中,除了data和touser需要后期代码取值,三个是可以配置的,故写在配置文件中

    View Code

    5.编写反序列化xml文件到对象的类

    首先需要编写一个与xml关联的类,代码如下:

    View Code

    然后编写反序列化xml的公共类,放到公共类库中,代码如下:

    1   public static T FromXmlFile(string xmlFile)2         {3             if ( !File.Exists(xmlFile)) throw new ArgumentNullException(xmlFile, "文件不存在!");4             using (FileStream fs = new FileStream(xmlFile, FileMode.Open, FileAccess.Read))5             {6                 XmlSerializer ser = new XmlSerializer(typeof(T));7                 return (T)ser.Deserialize(fs);8             }9         }

    6.因为微信模板消息体都是固定的五个参数,故把获取微信模板实体的方法放到一个公共的类中

    代码如下:

    View Code

    7.找到需要发送微信的环节,添加发送微信消息的代码

    代码如下:

    View Code

    总结:

    整个流程按步骤下来大家发现其实也没啥难度,第三方接口开发只要对方接口描述比较准确,各种规定比较明确,基本就是封装成接口需要的东西就完事了

    以上,关于微信开发的全部内容讲解完毕啦,欢迎大家继续关注!更多关于微信开发的干货请关注职坐标微信开发频道!

    展开全文
  • <?... namespace utils; // appid define('WX_APPID', sysconfig('wechat','web_appid'));...// 微信授权url get define('WX_AUTHORIZE_URL', 'https://open.weixin.qq.com/connect/oauth2/author.
    <?php
    
    namespace utils;
    
    // appid
    define('WX_APPID', sysconfig('wechat','web_appid'));
    // appsecret
    define('WX_APPSECRET', sysconfig('wechat','web_appsecret'));
    // 微信授权url get
    define('WX_AUTHORIZE_URL', 'https://open.weixin.qq.com/connect/oauth2/authorize');
    // 微信access_token url get
    define('WX_ACCESS_TOKEN_URL', 'https://api.weixin.qq.com/sns/oauth2/access_token');
    // 微信模板消息 url post
    define('WX_TEMPLATE_URL', 'https://api.weixin.qq.com/cgi-bin/message/template/send');
    // 微信模板消息token url get
    define('WX_MESSAGE_TOKEN_URL', 'https://api.weixin.qq.com/cgi-bin/token');
    
    
    
    
    /**
     * 微信授权
     */
    class WxAuthorize
    {
        public function getMessageToken()
        {
            $token = cache('WX_ACCESS_TOKEN');
            if (empty($token))
            {
                $params = [
                    'grant_type' => 'client_credential',
                    'appid' => WX_APPID,
                    'secret' => WX_APPSECRET,
                ];
                $url = WX_MESSAGE_TOKEN_URL . '?' . http_build_query($params);
                $response = curlRequest($url, 'get');
                if (!is_array($response) && !empty(json_decode($response, true)))
                {
                    $atData = json_decode($response, true);
                    if (isset($atData['access_token']))
                    {
                        $token = $atData['access_token'];
                        // 留5分钟缓冲时间
                        $expire = $atData['expires_in']-600;
                        cache('WX_ACCESS_TOKEN', $token, $expire);
                    }
                }
            }
            return $token;
        }
    
        /**
         * 发送模板消息
         */
        public function sendMessage($data)
        {
            $token = $this->getMessageToken();
            $log = ['title' => '发送模板消息'];
            if (empty($token))    
            {
                $log['info'] = 'token为空';
                trace($log, 'error');
                return false;
            }
            $response = [];
            try{
                $response = curlRequest(WX_TEMPLATE_URL . '?access_token=' . $token, 'post', json_encode($data, JSON_UNESCAPED_UNICODE), 'Content-type: json');
            }catch(\Exception $e)
            {
                $log['message'] = $e->getMessage();
                $log['code'] = $e->getCode();
                $log['info'] = '请求异常 发送失败';
                trace($log, 'error');
                return false;
            }
            $log['data'] = $response;
            if (!is_array($response) && !empty(json_decode($response, true)))
            {
                $status = json_decode($response, true);
                if (isset($status['errcode']) && $status['errcode'] == 0)
                {
                    return true;
                }
                else
                {
                    $log['info'] = 'errcode 不等于0 发送失败';
                    trace($log, 'error');
                }
            }
            else
            {
                $log['info'] = '请求错误 发送失败';
                trace($log, 'error');
            }
            return false;
        }
    
        /**
         * 获取微信授权url
         * @param $redirect_uri 回调地址 http/htpps.....
         * @param $scope 应用授权作用域 snsapi_base | snsapi_userinfo 
         * @param $state 重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节
         * @return string
         */
        public function getAuthorizeUrl(string $redirect_uri, $scope = 'snsapi_base', $state = '')
        {
            $params = [
                'appid' => WX_APPID,
                'redirect_uri' => $redirect_uri,
                'response_type' => 'code',
                'scope' => $scope,
                'state' => $state,
            ];
            $url = WX_AUTHORIZE_URL . '?' . http_build_query($params) . '#wechat_redirect';
            return $url;
        }
    
        /**
         * 获取微信网页授权access_token url
         * @param $code 填写第一步获取的code参数
         * @return string
         */
        public function getAccessTokenUrl(string $code)
        {
            $params = [
                'appid' => WX_APPID,
                'secret' => WX_APPSECRET,
                'code' => $code,
                'grant_type' => 'authorization_code',
            ];
            $url = WX_ACCESS_TOKEN_URL . '?' . http_build_query($params);
            return $url;
        }
    }

    curlRequest

    
    if (!function_exists('curlRequest')) {
        /**
         * 提交数据 
         * @param  string $url 请求Url
         * @param  string $method 请求方式  注意 get请求需要把参数拼接到url里
         * @param  array/string $headers Headers信息 
         * @param  array/string $params 请求参数
         * @author baiyu
         * @return json
         */
        function curlRequest($url, $method, $params = [], $headers = ''){
            if (is_array($params)) {
                $requestString = http_build_query($params);
            } else {
                $requestString = $params ? : '';
            }
            if (empty($headers)) {
                $headers = array('Content-type: text/json'); 
            } elseif (!is_array($headers)) {
                parse_str($headers,$headers);
            }
            
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_VERBOSE, 1);
            curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
            
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_POST, 1);
            $method = strtoupper($method);
            switch ($method){  
                case "GET" : curl_setopt($ch, CURLOPT_HTTPGET, 1);break;  
                case "POST": curl_setopt($ch, CURLOPT_POST, 1);
                             curl_setopt($ch, CURLOPT_POSTFIELDS, $requestString);break;  
                case "PUT" : curl_setopt ($ch, CURLOPT_CUSTOMREQUEST, "PUT");   
                             curl_setopt($ch, CURLOPT_POSTFIELDS, $requestString);break;  
                case "DELETE":  curl_setopt ($ch, CURLOPT_CUSTOMREQUEST, "DELETE");   
                                curl_setopt($ch, CURLOPT_POSTFIELDS, $requestString);break;  
            }
            
            $response = curl_exec($ch);
            
            curl_close($ch);
            
            
            if (stristr($response, 'HTTP 404') || $response == '') {
                return array('Error' => '请求错误');
            }
            return $response;
        } 
    }

    展开全文
  • 里面的测试代码中有本人测试号的微信模板id。麻烦替换成自己的可以吗?第一步:创建模板信息 第二步:准备模板代码实体类用到的属性自行加入就行publicclassTemplateData{privateStringvalue;privateStringcolor;...

    b494adb2d26c94ecc3d8512add6c3463.png

    本博文是测试公众号调用模板接口测试。请不要完全复制我的代码。里面的测试代码中有本人测试号的微信模板id。麻烦替换成自己的可以吗?

    第一步:创建模板信息

    09e04e5b8813b31c60f08217e07fe264.png

    89c9ab67f88c5fb9e82ba31cc22e8362.png

    第二步:准备模板代码实体类用到的属性自行加入就行

    public class TemplateData {

    private String value;

    private String color;

    public String getValue() {

    return value;

    }

    public void setValue(String value) {

    this.value = value;

    }

    public String getColor() {

    return color;

    }

    public void setColor(String color) {

    this.color = color;

    }

    }

    public class WxTemplate {

    /**

    * 模板消息id

    */

    private String template_id;

    /**

    * 用户openId

    */

    private String touser;

    /**

    * URL置空,则在发送后,点击模板消息会进入一个空白页面(ios),或无法点击(android)

    */

    private String url;

    /**

    * 标题颜色

    */

    private String topcolor;

    /**

    * 详细内容

    */

    private Map data;

    public String getTemplate_id() {

    return template_id;

    }

    public void setTemplate_id(String template_id) {

    this.template_id = template_id;

    }

    public String getTouser() {

    return touser;

    }

    public void setTouser(String touser) {

    this.touser = touser;

    }

    public String getUrl() {

    return url;

    }

    public void setUrl(String url) {

    this.url = url;

    }

    public String getTopcolor() {

    return topcolor;

    }

    public void setTopcolor(String topcolor) {

    this.topcolor = topcolor;

    }

    public Map getData() {

    return data;

    }

    public void setData(Map data) {

    this.data = data;

    }

    }

    第三步:具体方式实现本博文只是测试公众号测试模板接口调用

    public class SendOrderPaySuccessMsg {

    Logger log = LoggerFactory.getLogger(getClass());

    /**

    * 发送模板消息

    * appId 公众账号的唯一标识

    * appSecret 公众账号的密钥

    * openId 用户标识

    */

    public void send_template_message(String appId, String appSecret, String openId) {

    AccessToken token = WeixinUtil.getAccessToken(appId, appSecret);

    String access_token = token.getToken();

    String url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token="+access_token;

    WxTemplate temp = new WxTemplate();

    temp.setUrl("http://weixin.qq.com/download");

    temp.setTouser(openId);

    temp.setTopcolor("#000000");

    //        temp.setTemplate_id("ngqIpbwh8bUfcSsECmogfXcV14J0tQlEpBO27izEYtY");

    temp.setTemplate_id("LBBm6qscHUcz-0Gh7PlBonsLKtJBHjCLIirnaiBZ4xQ");

    Map m = new HashMap();

    TemplateData first = new TemplateData();

    first.setColor("#000000");

    first.setValue("这里填写您要发送的模板信息");

    m.put("first", first);

    TemplateData name = new TemplateData();

    name.setColor("#000000");

    name.setValue("另一行内人");

    m.put("name", name);

    TemplateData wuliu = new TemplateData();

    wuliu.setColor("#000000");

    wuliu.setValue("N行");

    m.put("wuliu", wuliu);

    TemplateData orderNo = new TemplateData();

    orderNo.setColor("#000000");

    orderNo.setValue("**666666");

    m.put("orderNo", orderNo);

    TemplateData receiveAddr = new TemplateData();

    receiveAddr.setColor("#000000");

    receiveAddr.setValue("*测试模板");

    m.put("receiveAddr", receiveAddr);

    TemplateData remark = new TemplateData();

    remark.setColor("#000000");

    remark.setValue("***备注说明***");

    m.put("Remark", remark);

    temp.setData(m);

    String jsonString = JSONObject.fromObject(temp).toString();

    JSONObject jsonObject = WeixinUtil.httpRequest(url, "POST", jsonString);

    System.out.println(jsonObject);

    int result = 0;

    if (null != jsonObject) {

    if (0 != jsonObject.getInt("errcode")) {

    result = jsonObject.getInt("errcode");

    log.error("错误 errcode:{} errmsg:{}", jsonObject.getInt("errcode"), jsonObject.getString("errmsg"));

    }

    }

    log.info("模板消息发送结果:"+result);

    }

    第四步:截图示意

    b29ea6756e41f3a307f388b59a9b6e6a.png

    展开全文
  • 登录微信公众平台 ...设置模板 通过微信公众平台接口调试工具获取token 获取关注公众号用户的openId ![在这里插入图片描述](https://img-blog.csdnimg.cn/a6054c5ce014443cbbb3e1f850f61c34.png?x-oss-pr
  • 同样的入参,在单元测试,本地启动服务调用均正常,在某个机器一直返回错误{"touser" : "abingnew","msgtype" : "miniprogram_notice","miniprogram_notice" : {"title" : "测试标签","page" : "/pages/index/index...
  • 以下为开发步骤:1.微信公众号为服务号且开通微信认证(其他类型账号不能发送)2.ip白...发送模板消息ip白名单网页授权开通模板消息并选用模板获取openid1.用户同意授权,获取codeappid:公众号appid基础设置里有(必填)...
  • 第一步:拿到微信appid和secret获取到access_token,然后得到我们请求微信发送模板消息的接口 第二步:封装发送的json数据,需要接受者的openid(唯一标识用户的id),模板id(templatedId),传输的数据(data) 上代码 ...
  • 前言:最近一直再弄微信扫码推送图文消息和模板消息发送,感觉学习到了不少东西。今天先总结一下微信公众平台模板消息发送。因为这个自己弄了很久,开始很多地方不明白,所以今天好好总结一下。微信公众平台技术...
  • 微信小程序发送模板消息详细教程

    千次阅读 2019-09-24 11:15:40
    微信小程序发送模板消息详细教程 最近做了正在做一个微信小程序,在其中遇到了的一个难点,就是这个微信小程序的模板消息的发送,这个东西对于初学者的我来说,可是让我费了不少事,好了废话不多说,上干货!! 在...
  • ", "color":"#173177" } } } 模板实例 包含多种数据类型,并且以json数据格式请求接口便可以发送模板消息,发送成功效果。 我们看到。 first中的value对应的第一部分需要填充{{first.DATA}}占位符的数据,color对应...
  • 35 36 @Controller37 public classTemplateMsgAct {38 39 /** 40 * 发送模板消息41 *官方文档地址:https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Template_Message_Interface.html#542 */ ...
  • 微信公众号模板消息

    2021-08-17 10:58:29
    目前项目中需要有一个除短信外其他方式通知或提醒用户业务操作的功能,故采用了...模板消息仅用于公众号向用户发送重要的服务通知,只能用于符合其要求的服务场景中,如信用卡刷卡通知,商品购买成功通知等。不支持广
  • /*** 微信模板类*/@Datapublic class WeChatTemplate implements Serializable {private static final long serialVersionUID = 612571563869874653L;/*** 模板id*/private String template_id;/*** 接收者...
  • //发送模板消息url $fasuerl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=".$access_token; $list = Db::query("select * from ims_make_speed_order where status=2 and (notice=1 ...
  • 需要给关注用户发送模板消息,由于公众号关注用户比较多,所以采用普通的curl等方式太慢。由于模板消息发送不需要等待微信的结果,所以利用php的fsockopen()函数可以达到快速发送的效果。代码如下:$data = ['touser...
  • * 发送模板消息 */ public function add(Request $request,$id){ $house_data = House::find($id); // dump($request->all()); // dd(session('weixin_token')); $phone = $request->input('phone
  • 模板消息还是在商城类的微信项目中使用比较多,模板消息仅用于公众号向用户发送重要的服务通知,只能用于符合其要求的服务场景中,如绑定手机号通知,商品购买成功通知等,不支持广告等营销类消息以及其它所有可能对...
  • } /*==============发送模板消息 独立的代码块=======================*/ //http://suez.xyhs.xin/index.php/api/weixin/pipei //$Weixin = new WeixinController(); //实例化类 //$Weixin->sendpipei($openid,$...
  • {"code":0,"message":"success","data":"{\"errcode\":40037,\"errmsg\":\"invalid template_id hint: [uxGuGA07228648]\"}","title":"推送模板消息"}这个结果string(296) "{"touser":"oW80R5abqNyHyWlAlHJHRrq71iIw...
  • 我们在微信公众号开发过程中经常会需要向用户推送消息,最常用到的就是微信公众号模板消息了,下面是代码工坊整理的php实现微信公众号模板...5、向微信模板消息接口发送数据,微信会把信息发送给指定用户。(用户需已...
  • controller接口: /** ** @param touser 接收用户openId * @param template_id 模板Id * @param url url 调用方需要编码 * @param topcolor topcolor 调用方需要编码 * @param data 模板参数,传过来的是json串调用...
  • 这篇文章主要介绍了Python编程之微信推送模板消息功能,结合实例形式分析了Python微信推送消息接口的调用相关操作技巧,需要的朋友可以参考下本文实例讲述了Python微信推送模板消息功能。分享给大家供大家参考,具体...
  • Page({data: {motto: 'Hello World',userInfo: {},hasUserInfo: false,userOpenID:'',canIUse: wx.canIUse('button.open-type.getUserInfo')},testSubmit: function (e) {var self = this;let _access_token = '10_K...
  • php 微信公众号 发送模板消息改变不了颜色 不知道为什么1、模板消息内容:2、发送的模板消息效果:序列化的模板消息内容如下:大家可以测试下,touser需要另外添加下a:4:{s:11:"template_id";s:43:"cIftnhJkRWw4Z-...
  • 1、利用不同平台下,相同的unionid来判断是发送到那个用户 2、获取微信小程序openid和unionid >>官方文档 3、获取微信公众号openid和unionid (触发条件是,用户的关注公众号和不在关注)。详情见下面代码 需...
  • 1 添加一个小程序的消息模板,获取到模板id,存储到数据库中... 这个formid 是和提交时的openid有关联的,只能是提交的那个人才能用,别人用不了也就是说,想要给谁发送模板消息,就要存储谁的form_id。例如 剑圣给...
  • 微信模板消息推送,在我本地写好代码测试完好,发布到正式版推送的消息中文乱码,这让我很忧伤的哈 开始查找问题,json需要设置为Content-type: application/json; charset=utf-8; charset=utf-8;我都有配置的,没...
  • token:z9YWJczPJJ_H5uI6oaiW9R5y3o_-srRIfUuIcsRtwuT5WnK1qT8EcZL0NANOSxaKSrzqohx7eSUZ3ublX-QSpJDwROdCeOABo_LaBpownf3XVIA73p_4jbBwSKVbb7-7TBSjACAYGX form_id:1513049390252 发送数据: {"touser":"orsQN0Slsj_...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,929
精华内容 8,771
关键字:

微信发送模板消息