微信公众账号开发_微信公众号绑定微信开发者账号 - CSDN
精华内容
参与话题
  • 微信公众号开发账号申请与接入

    万次阅读 2018-02-28 00:13:21
    接入微信公众平台开发需要使用微信公众号,由于正式微信公众号...所以,为了帮助开发者快速了解和上手微信公众号开发,熟悉各个接口的调用,微信还提供了微信公众帐号测试号,通过手机微信扫描二维码即可获得测试号。
    接入微信公众平台开发需要使用微信公众号,由于正式微信公众号注册具有一定门槛,普通用户很难申请。所以,为了帮助开发者快速了解和上手微信公众号开发,熟悉各个接口的调用,微信还提供了微信公众帐号测试号,通过手机微信扫描二维码即可获得测试号。
    测试号申请地址:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
    当普通微信用户向公众号发送消息或者与微信公众号进行互动触发某些事件时,微信服务器将会把这些消息或者事件以XML数据包格式POST到开发者配置的服务器地址URL上,对于公众号和公众账号测试号的配置方式如下。

    配置微信公众号

    微信公众平台地址:https://mp.weixin.qq.com
    配置步骤:公众平台首页-->开发-->基本配置-->服务器配置-->修改配置。

    配置测试号

    测试号管理地址:https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index
    对于公众账号测试号,在接口配置信息中对服务器地址URL和令牌Token进行设置,配置规则与正式微信公众号相同。

    验证服务器地址URL

    开发者提交配置信息后,微信服务器将发送GET请求到填写的服务器地址URL上以验证配置的服务器地址URL是否正确并确认开发者的身份,GET请求携带参数如下表所示:
    开发者需在配置的服务器地址URL中对GET请求传入的signature进行校验,以确认此次请求是否来自微信服务器,若确认此次GET请求来自微信服务器,只需原样返回echostr参数内容即可接入成功,否则接入失败。
    加密/校验流程如下:
    1)将token、timestamp、nonce三个参数进行字典序排序;
    2)将三个参数字符串拼接成一个字符串进行sha1加密;
    3)开发者获得加密后的字符串可与signature对比,判断该请求是否来源于微信。
    校验signature的Java示例代码如下。
    import java.io.InputStream;
    import java.io.PrintWriter;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Collections;
    import java.util.List;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RequestParam;
    
    import com.pengjunlee.wechat.msg.WeChatEncrypt;
    import com.pengjunlee.wechat.msg.WechatSession;
    
    /**
     * 处理微信消息和事件专用控制器
     */
    @Controller
    @RequestMapping("/wechat")
    public class WeChatController
    {
    
        private static final String token = "pengjunlee";// 公众号管理后台配置的令牌(Token)
    
        /**
         * 验证微信服务器端GET请求 实现一
         * 
         * @param out
         * @param request
         * @param response
         */
        @RequestMapping(value = "/index", method = RequestMethod.GET)
        public void checkSignature(PrintWriter out, HttpServletRequest request, HttpServletResponse response)
        {
    
            String signature = request.getParameter("signature"); // 微信加密签名
            String timestamp = request.getParameter("timestamp"); // 时间戳
            String nonce = request.getParameter("nonce"); // 随机数
            String echostr = request.getParameter("echostr"); // 随机字符串
    
            String[] arr = new String[]
            {
                    token, timestamp, nonce
            };
    
            // 对数组内的token、timestamp、nonce三个元素进行字典序排序
            Arrays.sort(arr);
    
            // 将排序后的token、timestamp、nonce三个字符串按顺序拼接成一个字符串
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < arr.length; i++)
            {
                sb.append(arr[i]);
            }
    
            // 对拼接好的字符串进行SHA-1加密
            String tmpStr = WeChatEncrypt.encrypt(sb.toString(), WeChatEncrypt.SHA_1);
    
            // 将加密后的字符串与signature进行比较
            if (tmpStr.equals(signature))
            {
                out.print(echostr);// 身份验证成功,将echostr字符串内容原样返回
            }
            else
            {
                out.print("");// 身份验证失败,返回空字符串
            }
            out.flush();
            out.close();
        }
    
        /**
         * 验证微信服务器端GET请求 实现二
         * 
         * @param out
         * @param signature
         * @param timestamp
         * @param nonce
         * @param echostr
         * @throws Exception
         */
        @GetMapping(value = "/index2")
        public void checkSignature2(PrintWriter out, @RequestParam(value = "signature", required = true) String signature, @RequestParam String timestamp,
                @RequestParam String nonce, @RequestParam String echostr) throws Exception
        {
            List<String> list = new ArrayList<String>(3)
            {
                private static final long serialVersionUID = 1L;
    
                @Override
                public String toString()
                {
                    return this.get(0) + this.get(1) + this.get(2);
                }
            };
            list.add(token); // 令牌
            list.add(timestamp);// 时间戳
            list.add(nonce);// 随机数
    
            Collections.sort(list); // 排序
            String tmpStr = WeChatEncrypt.encrypt(list.toString(), WeChatEncrypt.SHA_1); // SHA-1加密
            if (signature.equals(tmpStr))
            {
                out.write(echostr); // 身份验证成功,将echostr字符串内容原样返回
            }
            else
            {
                out.write(""); // 身份验证失败,返回空字符串
            }
            out.flush();
            out.close();
        }
    
        /**
         * 接收微信服务器POST过来的各种消息&事件
         * 
         * @param request
         * @param response
         * @throws Exception
         */
        @PostMapping(value = "/index")
        public void interceptMsgAndEvent(HttpServletRequest request, HttpServletResponse response) throws Exception
        {
            // response.setCharacterEncoding("UTF-8");
            response.setContentType("application/xml; charset=UTF-8"); // 设置响应内容的类型和编码字符集
            InputStream in = request.getInputStream();
            PrintWriter out = response.getWriter();
            handleMsgAndEvent(in, out);
        }
    
        /**
         * 处理微信服务器POST过来的各种消息&事件
         * 
         * @param in
         * @param out
         * @throws Exception
         */
        public void handleMsgAndEvent(InputStream in, PrintWriter out) throws Exception
        {
    
            WechatSession session = new WechatSession(in, out);
            session.process(); // 处理微信消息或者事件
            session.close(); // 关闭Session
        }
    }
    
    WeChatEncrypt  加密工具类。
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    
    /**
     * 微信公众号字符串加密工具类
     */
    public class WeChatEncrypt
    {
    
        public static final String MD5 = "MD5";
        public static final String SHA_1 = "SHA-1";
        public static final String SHA_256 = "SHA_256";
    
        /**
         * 使用指定的加密算法对字符串进行加密
         * 
         * @param srcStr
         *            要加密的字符串
         * @param encryptType
         *            MD5\SHA_1\SHA_256
         * @return 加密后的字符串
         */
        public static String encrypt(String srcStr, String encryptType)
        {
            String desStr = "";
            try
            {
                if ((encryptType == null) || ("".equals(encryptType)))
                    encryptType = "MD5";
                MessageDigest md = MessageDigest.getInstance(encryptType);
                md.update(srcStr.getBytes());
                desStr = bytes2Hex(md.digest());
            }
            catch (NoSuchAlgorithmException e)
            {
                return srcStr;
            }
            return desStr;
        }
    
        /**
         * 将字节数组转换为16进制字符串
         * 
         * @param bts
         * @return
         */
        private static String bytes2Hex(byte[] bts)
        {
            String des = "";
            String tmp = null;
            for (int i = 0; i < bts.length; i++)
            {
                tmp = Integer.toHexString(bts[i] & 0xFF);
                if (tmp.length() == 1)
                {
                    des += "0";
                }
                des += tmp;
            }
            return des;
        }
    
        public static void main(String[] args)
        {
            String strSrc = "\u53EF\u4EE5\u52A0\u5BC6\u6C49\u5B57";
            System.out.println("Source String:" + strSrc);
            System.out.println("Encrypted String:");
            System.out.println("Use MD5:" + encrypt(strSrc, null));
            System.out.println("Use MD5:" + encrypt(strSrc, "MD5"));
            System.out.println("Use SHA:" + encrypt(strSrc, "SHA-1"));
            System.out.println("Use SHA-256:" + encrypt(strSrc, "SHA-256"));
        }
    }
    本文项目源码已上传至CSDN,资源地址:http://download.csdn.net/download/pengjunlee/10257857
    展开全文
  • 1.开通测试号:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login 手机微信扫描确认登录之后,网页端可以获取一个测试的接口。 2.新建springboot项目作为测试号的后台 3.因为测试号的URL地址的...

    1.开通测试号:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login

    手机微信扫描确认登录之后,网页端可以获取一个测试的接口。
    在这里插入图片描述

    2.因为测试号的URL地址的配置要求,所以本地网络必须暴露在外网,需要借助穿透工具,下载地址

    在这里插入图片描述
    1)下载到本地,解压缩文件夹
    2)注册一个免费的账号
    在这里插入图片描述
    3)注册成功之后,进行实名认证
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    4)点击免费隧道
    在这里插入图片描述
    5)复制authtoken,配置到解压好的文件夹下,在解压好的目录下新建一个文件config.ini

    #将本文件放置于natapp同级目录 程序将读取 [default] 段
    #在命令行参数模式如 natapp -authtoken=xxx 等相同参数将会覆盖掉此配置
    #命令行参数 -config= 可以指定任意config.ini文件
    [default]
    authtoken= e377241028fec08af632359    #对应一条隧道的authtoken
    clienttoken=                    #对应客户端的clienttoken,将会忽略authtoken,若无请留空,
    log=none                        #log 日志文件,可指定本地文件, none=不做记录,stdout=直接屏幕输出 ,默认为none
    loglevel=ERROR                  #日志等级 DEBUG, INFO, WARNING, ERROR 默认为 DEBUG
    http_proxy=                     #代理设置 如 http://10.123.10.10:3128 非代理上网用户请务必留空
    

    在这里插入图片描述
    6)将红色部分改为你复制的authtoken,然后保存
    在这里插入图片描述
    7)点击运行natapp.exe
    在这里插入图片描述
    3.出现下列信息,代表穿透成功,将tomcat的端口号修改为80
    在这里插入图片描述
    找到tomcat的安装目录下的server.xml文件
    在这里插入图片描述
    4.然后重启tomcat
    在这里插入图片描述
    地址栏访问,穿透之后提供的网址,会出现tomcat的主页
    在这里插入图片描述
    5.新建springboot项目作为测试号的后台在这里插入图片描述
    在这里插入图片描述
    6.新建controller包,和新建JieRuController类

    package com.springboot.test.controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    /**
     * @author 小思
     * @PackageName:com.springboot.test.controller
     * @ClassName: JieRuController
     * @Description:
     * @date 2018/11/27 9:17
     */
    @Controller
    @RequestMapping("JieRu")
    public class JieRuController {
    }
    
    

    配置application.properties文件

    #接入的后台项目部署的服务器的端口号必须发布在80的端口上
    server.port=80
    server.servlet.context-path=/weixin
    

    配置weixin4j.properties文件

    #微信SDK配置文件
    #读取规则:优先读取System.getProperty()
    #再从weixin4j.properties读取,key
    #如果System.getProperty()与weixin4j.properties都没设置,则默认未NULL
    
    #开发者调试设置
    weixin4j.debug=true
    #公众号Token
    weixin4j.token=weixin4j
    
    #公众号原始ID
    weixin4j.oauth.originalid=gh_da433f9665e5
    #开发者第三方用户唯一凭证
    weixin4j.oauth.appid=wx2086f4cf7d2a0274
    #开发者第三方用户唯一凭证密钥
    weixin4j.oauth.secret=57f0ea52a5fdb7a93c5babc2a452d438
    
    
    #消息加密方式 0:明文模式(默认), 1:兼容模式, 2:安全模式(推荐)
    weixin4j.oauth.encodingtype=0
    #消息加密密钥(43位字符组成A-Za-z0-9)
    weixin4j.oauth.encodingaeskey=0123456789abcedfghijklmnopqrstuvwxyzZXCVBNM
    #网页安全授权URL
    weixin4j.oauth.url=
    
    #公众平台接口域名
    #通用域名(api.weixin.qq.com),使用该域名将访问官方指定就近的接入点;
    #上海域名(sh.api.weixin.qq.com),使用该域名将访问上海的接入点;
    #深圳域名(sz.api.weixin.qq.com),使用该域名将访问深圳的接入点;
    #香港域名(hk.api.weixin.qq.com),使用该域名将访问香港的接入点。
    weixin4j.api.domain=api.weixin.qq.com
    
    #微信支付_商户ID
    weixin4j.pay.partner.id=
    #微信支付_商户密钥
    weixin4j.pay.partner.key=
    #微信支付_通知URL
    weixin4j.pay.notify_url=
    
    #连接超时设置
    weixin4j.http.connectionTimeout=25000
    #请求超时设置
    weixin4j.http.readTimeout=25000
    #证书路径
    weixin4j.http.cert.path=
    weixin4j.http.cert.secret=
    
    #默认消息处理函数
    weixin4j.handler=org.weixin4j.spi.DefaultMessageHandler
    #weixin4j.message.handler.normal=org.weixin4j.spi.DefaultNormalMessageHandler
    #weixin4j.message.handler.event=org.weixin4j.spi.DefaultEventMessageHandler
    
    
    

    配置的时候,注意下面的信息要和测试的公众号的提供的信息保持一致,因为有很多测试公众号,你的后台必须接入到你的公众号上,这里就是做配置
    在这里插入图片描述
    7.配置微信的测试号的连接信息
    在这里插入图片描述
    在pom.xml引入weixin4j的依赖

    	   <!--引入weixin4j的依赖-->
            <dependency>
                <groupId>org.weixin4j.spring.boot</groupId>
                <artifactId>weixin4j-spring-boot-starter</artifactId>
                <version>1.0.0</version>
            </dependency>
    

    WeixinJieruController类继承WeixinJieruController
    配置好接口信息,点击提交
    在这里插入图片描述

    8.然后将tomcat停止,在idea启动springboot项目

    如果显示配置成功代表微信接口接入成功!
    配置失败,就是步骤不对哦,或者配置有误

    9.微信关注页面上你的测试号,发送信息给公众号,公众号显示“你的信息已经收到!”

    常见错误:tomcat的80端口号被占用
    错误分析以及解决方法
    案例的完整代码:https://download.csdn.net/download/zeal9s/10811316
    说在最后的话:编写实属不易,若喜欢或者对你有帮助记得点赞+关注或者收藏哦~

    展开全文
  • 微信公众号开发——项目搭建

    万次阅读 2018-09-11 15:23:25
    前往微信公众平台(https://mp.weixin.qq.com/)获取开发权限和开发账号,公众号分为好几种,小程序,订阅号,服务号,企业号,个人只能用订阅号,权限比较少(api接口权限); 二 想要自定义模块功能或者是回复...

    一 

    前往微信公众平台(https://mp.weixin.qq.com/)获取开发权限和开发账号,公众号分为好几种,小程序,订阅号,服务号,企业号,个人只能用订阅号,权限比较少(api接口权限);

    想要自定义模块功能或者是回复信息啥的,就得有一个自己的后台来写接口,所以要配置自己的服务器

    基本配置:服务器配置(首页-开发-基本配置-服务器配置)

    进入修改配置,这里的服务器地址必须是外网(没有服务器的小伙伴如果这里分不清。。外网特征就是别人可以通过你的本机ip直接访问到,在简单点就是,你如果使用WiFi连接的网络那就肯定是内网或者说是局域网,查看方式,window键加R键,输入cmd回车,然后输入ipconfig 查看你当前的ip,然后百度本机ip,不一样的话就不是外网,解决办法是使用natapp进行内网穿透或者是用路由器进行端口映射,将服务器的某个端口映射出去,在最后会有详细步骤)而且是80端口,格式为ip/域名+wx(接口名 ,固定,但是前面可以加路由比如ip/home/wx)Token随便写个;

    然后是后台不多说先上代码:

    /// <summary>
    /// 配合微信服务器验证域名或者是ip的可用行或者是获取消息的推送--pxj
    /// </summary>
    [AtSkipAuthorize]
    public void wx()
    {
    	//获取消息推送,或者是事件推送,类型是xml文件流
    	if (Request.RequestType == "POST")
    	{
    
    	}
    	else
    	{
    		#region 验证请求来源是否是微信
    		string signature = Request["signature"].ToString();
    		string timestamp = Request["timestamp"].ToString();
    
    		string nonce = Request["nonce"].ToString();
    		string echostr = Request["echostr"].ToString();
    		string token = "hellowb";
    		List<string> list = new List<string>() { token, timestamp, nonce };
    		list.Sort();
    		string data = string.Join("", list);
    		byte[] temp1 = Encoding.UTF8.GetBytes(data);
    		SHA1CryptoServiceProvider sha = new SHA1CryptoServiceProvider();
    		byte[] temp2 = sha.ComputeHash(temp1);
    
    		var hashCode = BitConverter.ToString(temp2);
    		hashCode = hashCode.Replace("-", "").ToLower();
    
    		if (hashCode == signature)
    		{
    			Response.Write(echostr);
    			Response.End();
    		}
    		LogHelper.WriteLog("signature:" + signature + " timestamp:" + timestamp + " nonce:" + nonce + " echostr:" + echostr);
    		#endregion
    	}
    }

    写好后台配置好服务器就可以在微信公众号网站也就是刚才的那个页面点击提交了,点击提交后微信的服务器会向你所配置的服务器80端口的这个接口发送GET请求,验证接口是否正确,如果提交成功,恭喜你可以进入下一个坑了;

    当你在写微信公众号的页面的时候,你有时候会用到上传图片或者打开摄像机等要求,这时候要接入JS_SDK,配置签名等等,这个签名应该算是配置里最难受的一块了。。。

    签名的获取有几个步骤,先是要通过appid和appSecret来获取access_token,然后用access_token来获取jsapi_ticket,代码如下

     //获取access_token
    string url = string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", appId, appSecret);
    var wc = new WebClient();
    string access_tokenRet = wc.DownloadString(url);
    string access_token = JsonHelper.JsonToObj<AccessTokenModel>(access_tokenRet).Access_Token;
    accesstokenstatic = access_token;
    
    //获取jsapi_ticket
    string Jsapi_TicketUrl = string.Format("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={0}&type=jsapi", access_token);
    var jsapiRet = wc.DownloadString(Jsapi_TicketUrl);
    string ticket = JsonHelper.JsonToObj<TickModel>(jsapiRet).ticket;
    ticketstatic = ticket;

    然后获取十位的时间戳和自己写的随机字符串和页面传来的url,将jsapi_ticket,url,timestamp(时间戳),nocestr(随机字符串随便写一个就行)sort方法排序,然后根据这几个的顺序进行赋值并用sha1加密如下

    string signaturestring = "jsapi_ticket=" + ticket + "&noncestr=" + nocestr + "&timestamp=" + timestamp + "&url=" + url2;
    byte[] temp1 = Encoding.UTF8.GetBytes(signaturestring);
    
    SHA1CryptoServiceProvider sha = new SHA1CryptoServiceProvider();
    byte[] temp2 = sha.ComputeHash(temp1);
    var hashCode = BitConverter.ToString(temp2);
    hashCode = hashCode.Replace("-", "").ToLower();

     如此一来全部的都有了,返回这些就行了,如果报错了说url不合法就要取配置以下域名,二级域名也能用;

    四 ,带参二维码的扫描和事件的推送

    当你的公众号涉及到分享二维码给其他人,每一张二维码上还得要有你的信息的时候,需要在公众号的二维码上添加上一个场景值,比如你的用户id,当客户或者是其他用户通过你分享的二维码进入公众号的时候,微信服务器会推送给你一个xml包,其中一个子节点上就存着那个场景值;

    直接上代码--获取部分,

     public void GetQrCode()
     {
    	 string accesstoken = accesstokenstatic;
    	 if (string.IsNullOrEmpty(accesstoken))
    	 {
    		 //先主动取获取以下所需要的变量
    		 getaccesstoken(null, null);
    		 accesstoken = accesstokenstatic;
    		 Timer();
    	 }
    	//使用匿名对象作为post的参数然后再序列化
    	 var datap = new
    	 {
    		 //二维码的有效期(10天)
    		 expire_seconds = 864000,
    		 //类型动态的二维码
    		 action_name = "QR_SCENE",
    		 //信息
    		 action_info = new
    		 {
    			 scene = new {
    				 //自定义参数数值型为scene_id ,字符为scene_str
    				 scene_id = 15552300793
    			 }
    		 }
    	 };
    	 //使用流发送post带参请求
    	 string url = string.Format("https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token={0}",accesstoken);
    	 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
    	 request.Method = "POST";
    	 request.ContentType = "application/json";
    	 byte[] data = Encoding.UTF8.GetBytes(JsonHelper.ModelToJson(datap));
    	 request.ContentLength = data.Length;
    	 using (Stream strea = request.GetRequestStream())
    	 {
    		 strea.Write(data,0,data.Length);
    		 strea.Close();
    	 }
    	 HttpWebResponse respose = (HttpWebResponse)request.GetResponse();
    	 Stream stream = respose.GetResponseStream();
    	 string stringRespose = "";
    	 using (StreamReader sr = new StreamReader(stream, Encoding.UTF8))
    	 {
    		 stringRespose = sr.ReadToEnd();
    	 }
    	 if (string.IsNullOrEmpty(stringRespose))
    	 {
    		 Response.Write("sorry");
    	 }
    	 else { 
    		 //此时已经获取到二维码所使用的ticket
    		 string qrticket = JsonHelper.JsonToObj<QrCoderTicektModel>(stringRespose).ticket; 
    		 //二维码解析后的地址(可以自己转化为二维码)
    		 string qrurl =  JsonHelper.JsonToObj<QrCoderTicektModel>(stringRespose).url; 
    		 Response.Write("hhhhhh");
    		 LogHelper.WriteLog("getsometing:" + stringRespose);
    	 }
     }

    现在是获得了二维码的解析后的url,和获取二维码的ticket;有两种方式可以得到二维码,一种是直接将这个地址url返给前端,前端自己生成,二是后台获取到这个二维码后保存到服务器,前端自己去取;

    获取微信的推送,如刚才所说,扫码的时候会发送一个xml包;

    代码如下

    public void wx()
    {
    	//获取消息推送,或者是事件推送,类型是xml文件流
    	if (Request.RequestType == "POST")
    	{
    		#region 推送
    		//加载xml包,获取推送的内容
    		StreamReader sr = new StreamReader(Request.InputStream);
    		string xmlData = sr.ReadToEnd();
    		LogHelper.WriteLog(xmlData);
    		var doc = new XmlDocument();
    		doc.LoadXml(xmlData);
    		//获取xml包里的消息类型和事件类型,分类处理
    		var msgTypeNode = doc.SelectSingleNode("xml/MsgType");
    		var evenTypeNode = doc.SelectSingleNode("xml/Event");
    		string msgTypeString = msgTypeNode.InnerText;
    		if (evenTypeNode == null)
    		{
    			//此时为普通的消息推送
    		}
    		else
    		{
    			//此时为事件推送
    			string evenTypeString = evenTypeNode.InnerText;
    			//扫描带参的二维码的时候和关注和取关的推送
    			if (evenTypeString == "SCAN" || evenTypeString == "subscribe")
    			{
    				string SaoMaRenOpenId = doc.SelectSingleNode("xml/FromUserName").InnerText;
    				var BeiSaoRenCanShuNode = doc.SelectSingleNode("xml/EventKey");
    				if (BeiSaoRenCanShuNode != null)
    				{
    					string BeiSaoRenCanShuSting = BeiSaoRenCanShuNode.InnerText.Split('_')[1];
    					//已经获取扫码人和被扫人的个人id,下面就是存到数据库做关联就ok了,用到的时候取
    				}
    			}
    
    			//地理位置推送
    			if (evenTypeString == "LOCATION")
    			{
    
    			}
    
    			//点击自定义菜单拉去信息的时候的推送
    			if (evenTypeString == "CLICK")
    			{
    
    			}
    		}
    		#endregion
    	}

    五,

    natapp内网穿透:

    https://natapp.cn/注册,登录,获取自己的隧道,下载客户端,解压,cmd进入客户端的文件夹,natapp.exe -authtoken = "你的autotoken",

    如下则成功了

     

     

    展开全文
  • 我们将使用微信公众账号方倍工作室(账号:pondbaystudio,二维码在最底部)作为讲解的例子。 这篇入门教程将引导你完成如下任务: 创建百度云平台应用启用微信公众平台开发模式获取订阅、文字、图片、语音、...

    在这篇入门教程中,我们假定你已经有了PHP语言程序、MySQL数据库、计算机网络通讯及XML语言基础。如果你还没有,那么请先学习相关知识。

    我们将使用微信公众账号方倍工作室(账号:pondbaystudio,二维码在最底部)作为讲解的例子。

    这篇入门教程将引导你完成如下任务:

    创建百度云平台应用启用微信公众平台开发模式获取订阅、文字、图片、语音、视频消息回复文本、图文及音乐消息程序开发
     

    创建百度云应用

    申请账号

    登录http://developer.baidu.com/bae ,使用邮箱或者手机注册一个账号,注册需要同时绑定手机并且验证邮箱。

    创建应用

    注册并登录成功以后,点击右上侧的,弹出如下窗口。

     

    应用名称自己随便填写一个,接入方式选择“手机web应用”,然后点击确定。

    说明:在以下的教程中,您可以将所有我填写为pondbay的地方改为你的一个相应的名称,如果您没有想好名称,最简单的方法就是qq这两个字符+qq号码,比如方倍工作室的QQ是1354386063,那么就将"pondbay"改为"qq1354386063"

     

    选择“云环境(BAE)”,

    在新的窗口中,填写应用域名的名称,环境类型选择PHP,其他根据自己需要选择或者使用上图默认值,然后点击确定

    注意:此处填写的域名将要在下面填写URL时用到。可以先保存下来。 

    创建版本

    在版本管理中,点击创建新版本

    版本号填写0,然后保存。

    上传代码

    将以下代码中的token改为你的名称,并另存为index.php。

    注意:此处填写的Token将要在下面填写URL时用到。可以先保存下来。

    复制代码代码如下:

    <?php
    /*
        方倍工作室 http://www.cnblogs.com/txw1958/
        CopyRight 2013  www.doucube.com  All Rights Reserved
    */

    define("TOKEN", "pondbay");

    $wechatObj = new wechatCallbackapiTest();
    $wechatObj->valid();

    class wechatCallbackapiTest
    {
        public function valid()
        {
            $echoStr = $_GET["echostr"];
            if($this->checkSignature()){
                echo $echoStr;
                exit;
            }
        }

        private function checkSignature()
        {
            $signature = $_GET["signature"];
            $timestamp = $_GET["timestamp"];
            $nonce = $_GET["nonce"];

            $token = TOKEN;
            $tmpArr = array($token, $timestamp, $nonce);
            sort($tmpArr);
            $tmpStr = implode( $tmpArr );
            $tmpStr = sha1( $tmpStr );

            if( $tmpStr == $signature ){
                return true;
            }else{
                return false;
            }
        }
    }
    ?>

    然后将其压缩成zip格式

    这样会生成一个index.zip的文件。

    回来版本管理中

    选择包上传更新

    选择刚才压缩好的zip包,点击上传。

    确定生效,并且点击 ,点击后如下图。

    百度云应用的创建就成功了。

     

     

    微信公众平台开发模式

    高级功能

    微信公众平台地址:https://mp.weixin.qq.com 

    登录微信公众平台后台,选择高级功能

    进入后就看到两种模式

    我们需要关闭编辑模式。点击编辑模式的进入

    滑动关闭

     

    开发模式

    进入开发模式里面

     点击成为开发者

    弹出URL和Token填写框

    此处的URL为创建百度云应用的域名,包括后面的duapp.com,而Token为index.php中定义的值。

    URL:   http://pondbay.duapp.com
    Token:  pondbay

    填写如下图,

     提交成功

    再滑动右上角启用按钮。

    至此,你已经成功启用开发模式。

    接收消息类型

    目前普通用户能向公众账号推送五种格式的消息:文本(包括表情)、语音、图片、视频、位置、链接。名片发送会失败。
    下面就这五种分别详解如下:

    1. 文本(包括表情)
    发送文本

    后台格式:

    复制代码代码如下:

    <xml>
     <ToUserName><![CDATA[gh_680bdefc8c5d]]></ToUserName>
     <FromUserName><![CDATA[oIDrpjqASyTPnxRmpS9O_ruZGsfk]]></FromUserName>
     <CreateTime>1359028446</CreateTime>
     <MsgType><![CDATA[text]]></MsgType>
     <Content><![CDATA[你好]]></Content>
     <MsgId>5836982729904121631</MsgId>
    </xml>

    发送表情

    后台格式

    复制代码代码如下:

    <xml><ToUserName><![CDATA[gh_680bdefc8c5d]]></ToUserName>
    <FromUserName><![CDATA[oIDrpjqASyTPnxRmpS9O_ruZGsfk]]></FromUserName>
    <CreateTime>1359044526</CreateTime>
    <MsgType><![CDATA[text]]></MsgType>
    <Content><![CDATA[/::)/::)/::)/::)/::)]]></Content>
    <MsgId>5837051792978241864</MsgId>
    </xml>

    XML格式讲解

    复制代码代码如下:

    ToUserName 消息接收方微信号,一般为公众平台账号微信号
    FromUserName 消息发送方微信号
    CreateTime 消息创建时间
    MsgType 消息类型;文本消息为text
    Content 消息内容
    MsgId 消息ID号可以看出,文本和表情的消息类型均为文本
    [html]

    2. 图片
    发送图片

    后台格式:

    [code]
    <xml><ToUserName><![CDATA[gh_680bdefc8c5d]]></ToUserName>
    <FromUserName><![CDATA[oIDrpjqASyTPnxRmpS9O_ruZGsfk]]></FromUserName>
    <CreateTime>1359028479</CreateTime>
    <MsgType><![CDATA[image]]></MsgType>
    <PicUrl><![CDATA[http://mmsns.qpic.cn/mmsns/L4qjYtOibuml238YYBcfS2FQ8JtNN69Bc4bbbscvQRrljbedVjlMEAA/0]]></PicUrl>
    <MsgId>5836982871638042400</MsgId>
    </xml>

    XML格式讲解

    复制代码代码如下:

    ToUserName 消息接收方微信号,一般为公众平台账号微信号
    FromUserName 消息发送方微信号
    CreateTime 消息创建时间
    MsgType 消息类型;图片消息为image
    PicUrl 图片链接地址,可以用HTTP GET获取
    MsgId 消息ID号 

    3. 语音
    发送语音

    后台格式:

    复制代码代码如下:

    <xml>
     <ToUserName><![CDATA[gh_680bdefc8c5d]]></ToUserName>
     <FromUserName><![CDATA[oIDrpjqASyTPnxRmpS9O_ruZGsfk]]></FromUserName>
     <CreateTime>1359028025</CreateTime>
     <MsgType><![CDATA[voice]]></MsgType>
     <MediaId><![CDATA[hGm9wmKth8RO_tuv5k9fJkSbovXWzZVYwG2jSsL7ukCqq6q1SiLzYnFEngFNUijs]]></MediaId>
     <Format><![CDATA[amr]]></Format>
     <MsgId>5836980921722890003</MsgId>
    </xml>

    XML格式讲解

    复制代码代码如下:

    ToUserName 消息接收方微信号,一般为公众平台账号微信号
    FromUserName 消息发送方微信号
    CreateTime 消息创建时间
    MsgType 消息类型;语音消息为voice
    MediaId 媒体ID
    Format 语音格式,这里为amr
    MsgId 消息ID号附:AMR接口简介
    全称Adaptive Multi-Rate,主要用于移动设备的音频,压缩比比较大,但相对其他的压缩格式质量比较差,由于多用于人声,通话,效果还是很不错的。 

    4. 视频
    发送视频

    后台格式:

    复制代码代码如下:

    <xml><ToUserName><![CDATA[gh_680bdefc8c5d]]></ToUserName>
    <FromUserName><![CDATA[oIDrpjqASyTPnxRmpS9O_ruZGsfk]]></FromUserName>
    <CreateTime>1359028186</CreateTime>
    <MsgType><![CDATA[video]]></MsgType>
    <MediaId><![CDATA[DBVFRIj29LB2hxuYpc0R6VLyxwgyCHZPbRj_IIs6YaGhutyXUKtFSDcSCPeoqUYr]]></MediaId>
    <ThumbMediaId><![CDATA[mxUJ5gcCeesJwx2T9qsk62YzIclCP_HnRdfTQcojlPeT2G9Q3d22UkSLyBFLZ01J]]></ThumbMediaId>
    <MsgId>5836981613212624665</MsgId>
    </xml>

    XML格式讲解

    复制代码代码如下:

    ToUserName 消息接收方微信号,一般为公众平台账号微信号
    FromUserName 消息发送方微信号
    CreateTime 消息创建时间
    MsgType 消息类型;视频消息为video
    MediaId 媒体ID
    ThumbMediaId 媒体缩略ID?
    MsgId 消息ID号 原文:http://www.cnblogs.com/txw1958/p/wechat-tutorial.html 

    5. 位置
    发送位置

    后台格式:

    复制代码代码如下:

    <xml><ToUserName><![CDATA[gh_680bdefc8c5d]]></ToUserName>
    <FromUserName><![CDATA[oIDrpjqASyTPnxRmpS9O_ruZGsfk]]></FLACFromUserName>
    <CreateTime>1359036619</CreateTime>
    <MsgType><![CDATA[location]]></MsgType>
    <Location_X>22.539968</Location_X>
    <Location_Y>113.954980</Location_Y>
    <Scale>16</Scale>
    <Label><![CDATA[中国广东省深圳市南山区深南大道9789号 邮政编码: 518057]]></Label>
    <MsgId>5837017832671832047</MsgId>
    </xml>

    XML格式讲解

    复制代码代码如下:

     ToUserName 消息接收方微信号,一般为公众平台账号微信号
     FromUserName 消息发送方微信号
     CreateTime 消息创建时间
     MsgType 消息类型,地理位置为location
     Location_X 地理位置纬度
     Location_Y 地理位置经度
     Scale 地图缩放大小
     Label 地理位置信息
     MsgId 消息ID号 

    6. 链接
    发送链接

    后台格式:

    复制代码代码如下:

    <xml>
    <ToUserName><![CDATA[gh_680bdefc8c5d]]></ToUserName> 
    <FromUserName><![CDATA[oIDrpjl2LYdfTAM-oxDgB4XZcnc8]]></FromUserName> 
    <CreateTime>1359709372</CreateTime> 
    <MsgType><![CDATA[link]]></MsgType> 
    <Title><![CDATA[分享一款应用给你 -方倍神图]]></Title> 
    <Description><![CDATA[方倍神图为您提供夫妻相测试,亲子鉴定等新奇、好玩的图片测试功能]]></Description> 
    <Url><![CDATA[http://israel.duapp.com/web/photo.php]]></Url> 
    <MsgId>5839907284805129867</MsgId> 
    </xml>

    XML格式讲解

    复制代码代码如下:

     ToUserName 消息接收方微信号,一般为公众平台账号微信号
     FromUserName 消息发送方微信号
     CreateTime 消息创建时间
     MsgType 消息类型,链接为link
     Title 图文消息标题
     Description 图文消息描述
     Url 点击图文消息跳转链接
     MsgId 消息ID号

    发送消息类型

    目前公众账号能向普通用户推送三种格式的消息:文本、图文、音乐。其中图文消息包括单条图文消息和多条图文消息,展示方式有一点点不同。
    另外,回复的消息支持星标操作:通过填写FuncFlag字段为1来对回复消息做星标操作后,可以在实时消息的星标消息分类中找到对应的推送消息。

    下面就这几种分别详解如下:

    1. 文本消息格式
    回复文本

    后台格式:

    复制代码代码如下:

    <xml>
    <ToUserName><![CDATA[oIDrpjqASyTPnxRmpS9O_ruZGsfk]]></ToUserName>
    <FromUserName><![CDATA[gh_680bdefc8c5d]]></FromUserName>
    <CreateTime>1359036631</CreateTime>
    <MsgType><![CDATA[text]]></MsgType>
    <Content><![CDATA[★★★★豆立方★★★★ 微信公众平台上最好玩的图片及视频应用]]></Content>
    <FuncFlag>0</FuncFlag>
    </xml>

    XML格式讲解

    复制代码代码如下:

     FromUserName 消息发送方
     ToUserName 消息接收方
     CreateTime 消息创建时间
     MsgType 消息类型,文本消息必须填写text
     Content 消息内容,大小限制在2048字节,字段为空为不合法请求
     FuncFlag 星标字段 
     

    2. 图文消息格式
    2.1 单条图文消息
    回复单条图文


    后台格式:

    复制代码代码如下:

    <xml>
        <ToUserName><![CDATA[oIDrpjqASyTPnxRmpS9O_ruZGsfk]]></ToUserName>
        <FromUserName><![CDATA[gh_680bdefc8c5d]]></FromUserName>
        <CreateTime>1359011899</CreateTime>
        <MsgType><![CDATA[news]]></MsgType>
        <Content><![CDATA[]]></Content>
        <ArticleCount>1</ArticleCount>
        <Articles>
            <item>
                <Title><![CDATA[【天津】天气实况 ]]></Title>
                <Description><![CDATA[温度:3℃ 湿度:43﹪ 风速:西南风2级]]></Description>
                <PicUrl><![CDATA[http://www.doucube.com/weixin/weather/icon/banner.jpg]]></PicUrl>
                <Url><![CDATA[]]></Url>
            </item>
        </Articles>
        <FuncFlag>0</FuncFlag>
    </xml>

    2.2 多条图文消息

    复制代码代码如下:

    <xml>
        <ToUserName><![CDATA[oIDrpjqASyTPnxRmpS9O_ruZGsfk]]></ToUserName>
        <FromUserName><![CDATA[gh_680bdefc8c5d]]></FromUserName>
        <CreateTime>1359011829</CreateTime>
        <MsgType><![CDATA[news]]></MsgType>
        <Content><![CDATA[]]></Content>
        <ArticleCount>8</ArticleCount>
        <Articles>
            <item>
                <Title><![CDATA[【天津】天气实况 温度:3℃ 湿度:43﹪ 风速:西南风2级]]></Title>
                <Description><![CDATA[]]></Description>
                <PicUrl><![CDATA[http://www.doucube.com/weixin/weather/icon/banner.jpg]]></PicUrl>
                <Url><![CDATA[]]></Url>
            </item>
            <item>
                <Title><![CDATA[06月24日 周四 2℃~-7℃ 晴 北风3-4级转东南风小于3级]]></Title>
                <Description><![CDATA[]]></Description>
                <PicUrl><![CDATA[http://www.doucube.com/weixin/weather/icon/d00.gif]]></PicUrl>
                <Url><![CDATA[]]></Url>
            </item>
            <item>
                <Title><![CDATA[06月25日 周五 -1℃~-8℃ 晴 东南风小于3级转东北风3-4级]]></Title>
                <Description><![CDATA[]]></Description>
                <PicUrl><![CDATA[http://www.doucube.com/weixin/weather/icon/d00.gif]]></PicUrl>
                <Url><![CDATA[]]></Url>
            </item>
            <item>
                <Title><![CDATA[06月26日 周六 -1℃~-7℃ 多云 东北风3-4级转东南风小于3级]]></Title>
                <Description><![CDATA[]]></Description>
                <PicUrl><![CDATA[http://www.doucube.com/weixin/weather/icon/d01.gif]]></PicUrl>
                <Url><![CDATA[]]></Url>
            </item>
            <item>
                <Title><![CDATA[06月27日 周日 0℃~-6℃ 多云 东南风小于3级转东北风3-4级]]></Title>
                <Description><![CDATA[]]></Description>
                <PicUrl><![CDATA[http://www.doucube.com/weixin/weather/icon/d01.gif]]></PicUrl>
                <Url><![CDATA[]]></Url>
            </item>
            <item>
                <Title><![CDATA[06月28日 周一 -1℃~-8℃ 多云 东北风3-4级转南风小于3级]]></Title>
                <Description><![CDATA[]]></Description>
                <PicUrl><![CDATA[http://www.doucube.com/weixin/weather/icon/d01.gif]]></PicUrl>
                <Url><![CDATA[]]></Url>
            </item>
            <item>
                <Title><![CDATA[06月29日 周二 1℃~-5℃ 多云 南风小于3级转3-4级]]></Title>
                <Description><![CDATA[]]></Description>
                <PicUrl><![CDATA[http://www.doucube.com/weixin/weather/icon/d01.gif]]></PicUrl>
                <Url><![CDATA[]]></Url>
            </item>
            <item>
                <Title><![CDATA[方倍工作室 版权所有]]></Title>
                <Description><![CDATA[]]></Description>
                <PicUrl><![CDATA[]]></PicUrl>
                <Url><![CDATA[]]></Url>
            </item>
        </Articles>
        <FuncFlag>0</FuncFlag>
    </xml>

    XML格式讲解

    复制代码代码如下:

    FromUserName 消息发送方
     ToUserName 消息接收方
     CreateTime 消息创建时间
     MsgType 消息类型,图文消息必须填写news
     Content 消息内容,图文消息可填空
     ArticleCount 图文消息个数,限制为10条以内
     Articles 多条图文消息信息,默认第一个item为大图
      Title 图文消息标题
      Description 图文消息描述
      PicUrl 图片链接,支持JPG、PNG格式,较好的效果为大图640*320,小图80*80
      Url 点击图文消息跳转链接
    FuncFlag 星标字段


    3. 音乐消息

    后台格式:

    复制代码代码如下:

    <xml>
        <ToUserName><![CDATA[ollB4jqgdO_cRnVXk_wRnSywgtQ8]]></ToUserName>
        <FromUserName><![CDATA[gh_b629c48b653e]]></FromUserName>
        <CreateTime>1372310544</CreateTime>
        <MsgType><![CDATA[music]]></MsgType>
        <Music>
            <Title><![CDATA[最炫民族风]]></Title>
            <Description><![CDATA[凤凰传奇]]></Description>
            <MusicUrl><![CDATA[http://zj189.cn/zj/download/music/zxmzf.mp3]]></MusicUrl>
            <HQMusicUrl><![CDATA[http://zj189.cn/zj/download/music/zxmzf.mp3]]></HQMusicUrl>
        </Music>
        <FuncFlag>0</FuncFlag>
    </xml>

    XML格式讲解

    复制代码代码如下:

    ToUserName     接收方帐号(收到的OpenID)
    FromUserName     开发者微信号
    CreateTime     消息创建时间
    MsgType          消息类型,此处为music
        Title       音乐标题
        Description 音乐描述
        MusicUrl     音乐链接
        HQMusicUrl     高质量音乐链接,WIFI环境优先使用该链接播放音乐
    FuncFlag     位0x0001被标志时,星标刚收到的消息。

    事件消息类型

    目前用户在关注和取消关注的时候会自动向公众平台发送事件推送消息:

    1. 关注事件

    复制代码代码如下:

    <xml>
        <ToUserName><![CDATA[gh_b629c48b653e]]></ToUserName>
        <FromUserName><![CDATA[ollB4jv7LA3tydjviJp5V9qTU_kA]]></FromUserName>
        <CreateTime>1372307736</CreateTime>
        <MsgType><![CDATA[event]]></MsgType>
        <Event><![CDATA[subscribe]]></Event>
        <EventKey><![CDATA[]]></EventKey>
    </xml>

    2. 取消关注事件

    复制代码代码如下:

    <xml>
        <ToUserName><![CDATA[gh_b629c48b653e]]></ToUserName>
        <FromUserName><![CDATA[ollB4jqgdO_cRnVXk_wRnSywgtQ8]]></FromUserName>
        <CreateTime>1372309890</CreateTime>
        <MsgType><![CDATA[event]]></MsgType>
        <Event><![CDATA[unsubscribe]]></Event>
        <EventKey><![CDATA[]]></EventKey>
    </xml>

    3. 菜单点击事件

    复制代码代码如下:

    <xml>
        <ToUserName><![CDATA[gh_680bdefc8c5d]]></ToUserName>
        <FromUserName><![CDATA[oIDrpjqASyTPnxRmpS9O_ruZGsfk]]></FromUserName>
        <CreateTime>1377886191</CreateTime>
        <MsgType><![CDATA[event]]></MsgType>
        <Event><![CDATA[CLICK]]></Event>
        <EventKey><![CDATA[天气深圳]]></EventKey>
    </xml>

    XML格式讲解

    复制代码代码如下:

    ToUserName     接收方微信号
    FromUserName 发送方微信号,若为普通用户,则是一个OpenID
    CreateTime     消息创建时间
    MsgType     消息类型,event
    Event     事件类型,subscribe(订阅)、unsubscribe(取消订阅)、CLICK(自定义菜单点击事件)
    EventKey 事件KEY值,与自定义菜单接口中KEY值对应

    简单的自动回复

    我们在官方的例子上做一些修改,实现了一个发送“?”就能回复当前时间的功能。
    该例子是接收文本消息($postObj->Content),并且回复文本消息($msgType = "text";)的。
    你可以把以下代码保存为index.php,按照上面提供的方法重新上传。
    代码如下:

    复制代码代码如下:

    <?php
    /*
        方倍工作室 http://www.cnblogs.com/txw1958/
        CopyRight 2013  www.doucube.com  All Rights Reserved
    */

    define("TOKEN", "pondbay");
    $wechatObj = new wechatCallbackapiTest();
    $wechatObj->responseMsg();

    class wechatCallbackapiTest
    {
        public function responseMsg()
        {
            $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];

            if (!empty($postStr)){
                $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
                $fromUsername = $postObj->FromUserName;
                $toUsername = $postObj->ToUserName;
                $keyword = trim($postObj->Content);
                $time = time();
                $textTpl = "<xml>
                            <ToUserName><![CDATA[%s]]></ToUserName>
                            <FromUserName><![CDATA[%s]]></FromUserName>
                            <CreateTime>%s</CreateTime>
                            <MsgType><![CDATA[%s]]></MsgType>
                            <Content><![CDATA[%s]]></Content>
                            <FuncFlag>0</FuncFlag>
                            </xml>";
                if($keyword == "?")
                {
                    $msgType = "text";
                    $contentStr = date("Y-m-d H:i:s",time());
                    $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                    echo $resultStr;
                }
            }else{
                echo "";
                exit;
            }
        }
    }
    ?>


    效果如下:

    展开全文
  • 微信公众号开发基本流程

    万次阅读 多人点赞 2019-04-26 09:40:21
    微信公众平台官网:https://mp.weixin.qq.com 文章目录一、注册公众号二、了解公众号管理页面三、必备开发者工具的使用1.开发者文档2.在线接口调试工具3.web开发者工具4.公众平台测试账号四、细读开发者文档五、...
  • 微信公众号开发测试帐号

    万次阅读 2018-01-10 10:33:01
    扫描关注后登录 ...填写JS接口安全域名 ,设置JS接口安全域后,通过关注该测试号,开发者即可在该域名下调用微信开放的JS接口,请阅读微信JSSDK开发文档。 注意:不知道啥原因,用自己的帐号申请测试
  • PHP实现微信公众平台开发-基础篇

    万次阅读 2017-12-20 21:28:09
    第1章 微信公众账号及申请流程微信三角色关系微信公众账号: 充当的是自媒体角色 微信应用: 平台角色 微信用户: 普通用户 对微信应用而言: 微信应用给微信公众账号和微信用户提供了信息交互,获取资讯的一个...
  • 微信公众号系列之测试号使用

    万次阅读 2019-11-10 21:31:12
    微信公众平台认证之前,我们可以先申请一个测试的公众号来进行测试,这对开发人员来说还是有很大好处的! 微信公众平台提供了测试账号,在公众账号没有审核之前,也是可以进行开发的。进入后台->开发者工具-...
  • Java开发微信公众号(一)——微信开发环境搭建

    万次阅读 多人点赞 2017-12-10 16:32:22
    准备工作最近学习微信公众平台的开发,在申请一个微信公众号的时候,发现如果不是公司或组织只能申请订阅号(并且是个人的),而且不能使用微信提供的高级接口,所以如果想要使用公众平台的高级接口的话,申请一个...
  • 微信公众平台完整开发教程

    万次阅读 2015-07-31 11:33:21
    还能通过公众账号来获取各种资源……如今的微信就是在日中天的状态(最新估值已达 600 亿),公众平台带来的影响有目共睹,所以很多人都有自己的公众号,想充分利用却无处下手,所以我们在这里给大家提供一下微信...
  • 微信公众平台、微信开放平台的关系背景简介微信公众平台能干什么?微信开放平台(open平台)能干什么? 背景 做微信相关开发的时候,要登录很多账号,而且不同的功能要在这两个账号之间切换来切换去,很烦;所以今天...
  • 进入网址后,会分配一个appID和appsecret账号: 需要一个外网映射工具,可在此链接中下载https://natapp.cn/login。 然后将你的外网映射地址修改对应的URL中:注意只修改前面的路径,保留后面的/wx/portal,第.....
  • 微信小游戏开发零基础教程(一)-CocosCreator

    万次阅读 多人点赞 2018-12-19 10:58:48
    微信小游戏零基础教程(一)-CocosCreator最终效果预览准备工作创建工程测试第一个场景 ...去 微信公众平台 注册一个账号,记得选择账号用途 小程序 -&amp;amp;gt;注册地址 创建工程 打开安装好的 CocosCre...
  • 公众平台开发模式的数据交互方式 1.2 公众平台开发模式的数据交互方式 公众平台消息接口为开发者提供了与用户进行消息交互的能力。对于成功接入消息接口的公众账号,当用户发消息给公众账号时,微信公众平台...
  • [049] 微信公众平台开发视频公开课第1讲-基础入门

    万次阅读 多人点赞 2014-05-17 23:31:14
    微信公众平台开发视频公开课强力来袭,你准备好了吗?2014年4月26日晚8点,我在CSDN社区在线培训课堂等你,将为你带来90分钟的精彩视频课程+30分钟的在线互动答疑,为你扫清微信公众平台开发入门的主要障碍! 本次...
  •   1.开发语言使用Java  2.使用微信接口测试账号进行本地测试  3.使用natapp(原ngrok)将本地地址映射到外网...最近学习微信公众平台的开发,在申请一个微信公众号的时候,发现如果不是公司或组织只能申请订...
  • 二、微信公众号请求交互方式

    千次阅读 2016-04-19 15:52:02
    刚开始看微信公众号开发...~对于成功接入消息接口的公众账号,当用户用移动端微信发消息给公众账号时,微信公众平台服务器(微信平台自己的服务器)会使用HTTP请求对接入的网址进行消息推送,第三方服务器(SAE:Sina Ap
  • 微信公众号开发的测试账号配置

    万次阅读 2018-03-21 17:06:07
    2.在微信公众平台登录你的账号 微信公众平台:https://mp.weixin.qq.com 进入 开发-&gt;开发者工具 页面 点击 公众平台测试账号 如下图所示: 3.配置服务器和js接口安全域名 如下图所示: 第一步,...
  • 微信公众平台使用教程-多客服

    千人学习 2018-10-22 21:38:05
    微信公众平台使用教程之多客服是子恒老师推出的微信使用课程,目的是为了后面微信多客服的开发打下基础,因为只有你熟悉了微信公众号多客服的使用,在开发时,才能够知道里面用到的业务场景。欢迎反馈:微信/QQ:...
  • 微信小程序开发(一)新建小程序项目

    千次阅读 2017-06-01 09:02:07
    1.微信·公众平台登录你的小程序账号; 2.设置–>开发设置–>开发者ID 获取小程序AppSecret 1.微信·公众平台登录你的小程序账号; 2.设置–>开发设置–>开发者ID 配置服务器域名 1.微信·公众平台登录你...
1 2 3 4 5 ... 20
收藏数 15,534
精华内容 6,213
关键字:

微信公众账号开发