2015-04-26 15:31:20 zhengxiaojunkite 阅读数 3809

参考微信开发接口:http://mp.weixin.qq.com/wiki/13/43de8269be54a0a6f64413e4dfa94f39.html

表格结构:

主菜单:



二级菜单:


思路:通过存储的appid和appsecret获取access_token--->通过存储的菜单拼接提交的body--->通过微信的接口post提交

代码:

<?php

class WeixinAction extends Action{

    //创建自定义菜单
    public function create(){
        $api=M('wx_weixin_inf')->find();//取出数据库中保存的appid和appsecret
        $url_get='https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$api['wei_appID'].'&secret='.$api['wei_appSecret'];
        $json=json_decode(file_get_contents("$url_get"));
        if($api['wei_appID']==false||$api['wei_appSecret']==false){
        $this->error('必须先填写【AppId】【 AppSecret】');exit;}      
       //开始拼接数据
        $data = '{"button":[';

        $class=M('wx_menu1_inf')->limit(3)->order('men1_order')->select();//取出顶级菜单
        $k=1;
        foreach($class as $key=>$vo){
        //主菜单

        $data.='{"name":"'.$vo['men1_name'].'",';

        //取出二级菜单

        $c=M('wx_menu2_inf')->where(array('men1_id'=>$vo['men1_id']))->order('men2_order')->limit(5)->select();

        $count=M('wx_menu2_inf')->where(array('men1_id'=>$vo['men1_id']))->limit(5)->count();
        $num=1;
        //拼接子菜单
        if($c!=false){

            $data.='"sub_button":[';
            foreach($c as $voo){
                if($num==$count) $data.='{"type":"view","name":"'.$voo['men2_name'].'","url":"'.$voo['men2_url'].'"}';
                else $data.='{"type":"view","name":"'.$voo['men2_name'].'","url":"'.$voo['men2_url'].'"},';
                $num++;
            }

            $data.=']';

        }else{

            $data.='"type":"view","url":"'.$vo['men1_url'].'"';

        }

        if($k==3){

            $data.='}';

            }else{

            $data.='},';

            }

            $k++;
        }

        $data.=']}';

        $url='https://api.weixin.qq.com/cgi-bin/menu/create?access_token='.$json->access_token;
       // P($data);
        //exit;
        file_get_contents('https://api.weixin.qq.com/cgi-bin/menu/delete?access_token='.$json->access_token);
        if($this->api_notice_increment($url,$data)==false){
        $this->error('操作失败',U("System/defineMenu"));

        }else{

        $this->success('操作成功',U("System/defineMenu"));

        }
        exit;
    }

    //POST提交方法

    function api_notice_increment($url, $data){

        $ch = curl_init();

        $header = "Accept-Charset: utf-8";

        curl_setopt($ch, CURLOPT_URL, $url);

        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");

        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);

        curl_setopt($curl, CURLOPT_HTTPHEADER, $header);

        curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');

        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

        curl_setopt($ch, CURLOPT_AUTOREFERER, 1);

        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

        $tmpInfo = curl_exec($ch);
       // p($tmpInfo);

        if (curl_errno($ch)) {

        return false;

        }else{

        return true;

        }

    }

}

?>

2014-05-13 23:39:25 axiaochong 阅读数 1271

一直没想过要开个微信公众号,想到经营公众号估计跟经营微博一样,像我这种素质的,肯定没有这种基因。

师兄推荐了一个学经济的妹纸过来请教我微信公众号开发者模式如何开启,妹纸请教,那必须上刀山下火海哇。

稍作研究了一下,其实并不复杂,妹纸被卡到的地方是输入URL和Token的地方,其实这个URL和Token想明白了还是很容易理解的。微信的开发者模式的意义在于,当订阅者通过菜单栏或者发送消息等方式向公众号发送请求的时候,请求会首先到达微信服务器,然后微信服务器需要把这个请求再转发给开发者自己的网站服务器上,开发者在自己的网站中设置好相应请求对应的响应,然后响应就可以发送给微信的服务器,随后便可以推送到订阅者的微信客户端了。

所以,在成为开发者之前,需要先对开发者的网站进行验证,所以便有了URL和Token的验证。URL其实对应的就是开发者网站所在服务器的地址,即网站页面对应的地址,根据微信开发文档的要求,该URL对应的页面需要对微信服务器发送过来的参数进行响应回传给微信服务器,而Token就是用来进行匹配的,所以Token可以任意指定一段字符。

那URL该如何获得呢?如果你有一台自己的服务器和一个属于自己的域名,那就十分方便了。但是如果没有呢?现在BAE、SAE、阿里云等云引擎提供了一个很好的方法,网上有很多使用BAE建立自己网站的教程,而且使用BAE的话可以自动设置一个域名,也省去了再进行域名申请购买的麻烦,所以这种方法也很方便简单。

有了自己的网站之后,就需要按照开发者接入指南中的要求,生成需要的页面了,其实接入指南中已经给出了很好的PHP的例子,只要将里边的Token改成自己想要设置的任意字符,然后上传到BAE里边部署的应用引擎上就ok了,然后把这个页面对应的URL填入微信公众平台对应的框框内,再填入自己想要设置的Token,就可以完成验证了。当然,也有很多人习惯使用Java进行web的开发,也想要使用Java进行验证,网上也有很详细的教程。其实无论使用哪种语言,只要能够get到相应的参数,然后echo回微信服务器需要的参数,就都可以完成验证的。

实测时发现将改好的PHP代码上传至BAE上以后,多次测试均无法通过微信公众平台的验证。最后无奈之下改用SAE,在里边随意创建了个版本,SAE还直接支持在线修改版本库里边的代码,直接将默认生成的index.php修改成用于验证的php代码,亲测直接通过。

小记。

2019-11-30 21:52:21 CC1991_ 阅读数 389

在微信公众号运维过程中,需要知道各种设置,而且也要知道微信公众平台开发过程中的一些基本设置,那么本篇博文就来分享一下在微信公众平台开发的过程中要用到的开发者密码的设置方法,如果想要进行微信公众号开发就要必须先去微信公众平台的基本设置里面的公众号开发信息里面设置开发者密码,具体设置开发者密码的步骤如下所示。

1、登录进入微信公众平台管理平台;

2、在微信公众平台主界面的左侧菜单导航栏里面,一直下拉到底部,找到“</>开发”—>“基本配置”,点击进入;

3、进入基本配置界面,如果从来没有开通成为开发者,需要点击勾选同意服务协议,然后点击“成为开发者”按钮,申请成为开发者;

然后就可以进入公众号开发信息部分,看到开发者密码后面对应的“启用”按钮,点击该按钮;

4、设置开发者密码之前,需要公众号的管理员扫描二维码进行身份确认,确认账号安全;

5、进入密码验证,输入公众号的登录密码,输入验证码,然后点击“下一步”;

6、进入查看开发者密码界面,然后复制并保存好“AppSecret”,并且勾选下面的协议,最后点击“确定并进行下一步”按钮;

7、最后就进入设置开发者密码设置成功界面,然后点击“完成”按钮;

8、设置万开发者密码之后,还可以进行重置,如果要重置开发者密码,直接点击开发者密码后面对应的“重置”按钮;点击重置按钮之后,会有一个提示框,确认重置开发者密码提示框,然后点击“确认重置”,管理员进行身份认证之后,即可重置开发者密码。

以上就是本章全部内容,欢迎关注三掌柜的微信公众号“iOS开发by三掌柜”,三掌柜的新浪微博“三掌柜666”,欢迎关注!

三掌柜的微信公众号:

三掌柜的新浪微博:

 

2019-08-28 14:15:00 bangyang7328 阅读数 20

 打开微信开发者工具 创建第一个小程序

  • 步骤:

    • 打开微信开发者工具

    • 使用微信扫码登录

    • 点击小程序-创建小程序

      • 项目名

      • 项目路径

      • appid

      • 不使用云服务器

      • 语言: javascript

 截图如下:

 

微信开发者开发工具的组成

  • 菜单栏

  • 工具栏

    • 预览

      • 描述二维码

      • 自动预览

    • 切后台

  • 模拟器

  • 编译器

  • 调试器

 目录结构:

    

 

1.项目结构

  • 对比:

    • web页面:

      • 技术栈:

        • html

          • 从语义化的角度来描述页面结构

        • css

          • 从审美的角度来美化页面

        • js

          • 从交互的角度来提升用户体验

    • 小程序页面

      • 技术栈:

        • wxml

          • 描述微信页面的结构

        • wxss

          • 描述微信页面的样式

        • js

          • 书写微信的逻辑代码

        • json

          • 配置页面的相关信息

  • 组成

    • pages:管理当前小程序中所有的页面

      • index

        • index.wml

        • index.js

          • 注意点:

            • 所有的代码都是写在

              Page({
               
              })
        • index.wxss

        • index.json

          • 注意点:

            • 如果没有内容,必须添加一个空对象

    • app.json:注册小程序中的页面

  • 小技巧
    • 快速创建一个页面

      • 在 app.json 中的 pages 下添加一个路径,直接保存,可以自动生成对应的页面

    • 设置项目的默认首页

      • 在 app.json 中的 pages 将路径移到第一个元素中










转载于:https://www.cnblogs.com/KoBe-bk/p/11423765.html

2017-08-15 09:50:48 zxxz5201314 阅读数 1839

我的微信公众号是个人订阅号,个人订阅号不能认证,所以没有自定义菜单的权限。我使用的是微信公众平台提供的一个测试账号。
测试账号
测试号里面会提供一个appid和appsecret,同样需要接口配置。
配置接口

创建菜单:

package com.weixin.util;
import java.io.IOException;
import java.util.Map;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.ParseException;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;

import com.alibaba.fastjson.JSON;
import com.weixin.menu.Button;
import com.weixin.menu.ClickButton;
import com.weixin.menu.Menu;
import com.weixin.menu.ViewButton;

import net.sf.json.JSONObject;

public class HttpUtil {
    private static final String APPID = "APPID";
    private static final String APPSECRET = "APPSECRET";


    private static final String ACCESS_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";

    private static final String CREATE_MENU_URL = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN";
    /**
     * get请求
     * @param url
     * @return
     */
    public static JSONObject doGetStr(String url) throws ParseException, IOException{
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpGet httpGet = new HttpGet(url);
        JSONObject jsonObject = null;
            HttpResponse response = httpClient.execute(httpGet);
            HttpEntity entity = response.getEntity();
            if (entity != null) {
                String result = EntityUtils.toString(entity, "UTF-8");
                jsonObject = JSONObject.fromObject(result);
            }
        return jsonObject;
    }

    /**
     * post请求
     * @param url
     * @param outStr
     * @return
     */
    public static JSONObject doPostStr(String url,String outStr){
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(url);
        JSONObject jsonObject = null;
        httpPost.setEntity(new StringEntity(outStr, "UTF-8"));
        try {
            HttpResponse response = httpClient.execute(httpPost);
            String result = EntityUtils.toString(response.getEntity(), "UTF-8");
            jsonObject = JSONObject.fromObject(result);
        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return jsonObject;
    }

    /**
     * 通过判断获取AccessToken:本地-网络
     * @return
     * @throws IOException
     */
    public static String getAccessToken() throws IOException{
        String filePath = "E:/zx/access_token/access_token01.txt";
        String access_token = null;
        String read= ReadAndWriteTxt.readFile(filePath);
        if (read.equals("001")) {
            access_token = getAccessTokenHttp();
            String str = access_token+"++"+ReadAndWriteTxt.getTime;
            ReadAndWriteTxt.writeFile(filePath, str);
            System.out.println("new");
        }else if((ReadAndWriteTxt.getTime - Integer.valueOf(read.split("++")[1]).intValue()) > 7200){
            access_token = getAccessTokenHttp();
            String str = access_token+"++"+ReadAndWriteTxt.getTime;
            ReadAndWriteTxt.writeFile(filePath, str);
            System.out.println("update");
        }else {
            access_token = read.split("++")[0];
            System.out.println("show");
        }
        return access_token;
    }

    /**
     * 获取微信的AccessToken
     * @return
     * @throws ParseException
     * @throws IOException
     */
    @SuppressWarnings("unchecked")
    public static String getAccessTokenHttp() throws ParseException, IOException{
        String url = ACCESS_TOKEN_URL.replace("APPID", APPID).replace("APPSECRET", APPSECRET);
        JSONObject jsonObject = doGetStr(url);
        Map<String, String> maps = null;
        if (jsonObject != null) {
            maps = (Map<String, String>) JSON.parse(jsonObject.toString());
        }
        String access_token = maps.get("access_token");
        return access_token;
    }

    /**
     * 初始化菜单
     * @return
     */
    public static Menu initMenu(){
        Menu menu = new Menu();
        ClickButton button11 = new ClickButton();
        button11.setName("click菜单");
        button11.setType("click");
        button11.setKey("11");

        ViewButton button21 = new ViewButton();
        button21.setName("view菜单");
        button21.setType("view");
        button21.setUrl("https://www.baidu.com/");

        ClickButton button31 = new ClickButton();
        button31.setName("扫码事件");
        button31.setType("scancode_push");
        button31.setKey("31");

        ClickButton button32 = new ClickButton();
        button32.setName("地理位置");
        button32.setType("location_select");
        button32.setKey("32");

        Button button = new Button();
        button.setName("菜单");
        button.setSub_button(new Button[]{button31,button32});

        menu.setButton(new Button[]{button11,button21,button});

        return menu;
    }

    public static int creatMenu(String token,String menu){
        int result = 0;
        String url = CREATE_MENU_URL.replace("ACCESS_TOKEN", token);
        JSONObject jsonObject = doPostStr(url, menu);
        if (jsonObject != null) {
            result = jsonObject.getInt("errcode");
        }
        return result;
    }
}

写一个测试类

package com.weixin.text;

import java.io.IOException;


import com.weixin.util.HttpUtil;

import net.sf.json.JSONObject;

public class Test {

    public static void main(String[] args) throws IOException{
        String menu = JSONObject.fromObject(HttpUtil.initMenu()).toString();
        int result = HttpUtil.creatMenu(HttpUtil.getAccessToken(), menu);
        if (result == 0) {
            System.out.println("创建菜单成功");
        }else {
            System.out.println("错误码:"+result);
        }
    }

}

源码:
http://download.csdn.net/download/zxxz5201314/9933934
PS:终于审核过了。。。。

Java微信开发入门

阅读数 1119

没有更多推荐了,返回首页