微信开发接口接入

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

第一步:填写服务器配置

主要填写服务器地址(URL)、Token和EncodingAESKey,其中URL是开发者用来接收微信消息和事件的接口URL。Token可由开发者可以任意填写,用作生成签名(该Token会和接口URL中包含的Token进行比对,从而验证安全性)。EncodingAESKey由开发者手动填写或随机生成,将用作消息体加解密密钥。


第二步:验证消息的确来自微信服务器

开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带参数如下表所示:

参数描述
signature微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
timestamp时间戳
nonce随机数
echostr随机字符串

开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。

1)将token、timestamp、nonce三个参数进行字典序排序 2)将三个参数字符串拼接成一个字符串进行sha1加密 3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信

检验signature的PHP示例代码:

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;
		}
	}

第三步:依据接口文档实现业务逻辑

1)验证URL有效性成功后即接入生效,成为开发者。

2)成为开发者后,用户每次向公众号发送消息、或者产生自定义菜单、或产生微信支付订单等情况时,开发者填写的服务器配置URL将得到微信服务器推送过来的消息和事件,开发者可以依据自身业务逻辑进行响应

3)用户向公众号发送消息时,公众号方收到的消息发送者是一个OpenID,是使用用户微信号加密后的结果,每个用户对每个公众号有一个唯一的OpenID

消息回复的代码如下:

public function responseMsg()
    {
		//get post data, May be due to the different environments
		$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
        file_put_contents("msg.txt", $postStr,FILE_APPEND);

      	//extract 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(!empty( $keyword ))
                {
              		$msgType = "text";
                    // $contentStr="123";

                	$contentStr =$this->responsekeyword($keyword) ;
                	$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType,$contentStr );
                	echo $resultStr;
                }else{
                	echo "Input something...";
                }

        }else {
        	echo "";
        	exit;
        }
    }
    
    //关键字回复
        public function responsekeyword($keywords){
            if($keywords == "天气"){
                $content="今天天气阴天";
                return $content;
            }else if($keywords == "放假"){
                $content="今年不放假";
                return $content;
                // echo "123";
            }else{
                $content="sorry I do not know!";
               return $content;
            }
            

        }

具体完整的代码如下:

<?php
/**
  * wechat php test
  */

//define your token
define("TOKEN", "weixin");
$wechatObj = new wechatCallbackapiTest();
$wechatObj->run();


class wechatCallbackapiTest
{

	public function run()
    {

    	//验证是否是接受的腾讯
	    if($this->checkSignature()==false){
        	die("非法请求");
        }

        if (isset($_GET["echostr"])) {
        	$echoStr = $_GET["echostr"];
        	echo $echoStr;
        	exit;
        } else {
        	$this->responseMsg();
        }
        //valid signature , option
        
    }

    public function responseMsg()
    {
		//get post data, May be due to the different environments
		$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
        file_put_contents("msg.txt", $postStr,FILE_APPEND);//将信息写入文件

      	//extract 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(!empty( $keyword ))
                {
              		$msgType = "text";
                    // $contentStr="123";

                	$contentStr =$this->responsekeyword($keyword) ;
                	$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType,$contentStr );
                	echo $resultStr;
                }else{
                	echo "Input something...";
                }

        }else {
        	echo "";
        	exit;
        }
    }
    
    //关键字回复
        public function responsekeyword($keywords){
            if($keywords == "天气"){
                $content="今天天气阴天";
                return $content;
            }else if($keywords == "放假"){
                $content="今年不放假";
                return $content;
                // echo "123";
            }else{
                $content="sorry I do not know!";
               return $content;
            }
            

        }
		
	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;
		}
	}
}

?>






用java开发微信公众号:公众号接入和access_token管理(二) 本文为原创,原始地址为http://www.cnblogs.com/fengzheng/p/5027630.html 上一篇说了微信开发的准备工作,准备工作完成之后,就要开始步入正题了。其实微信公众号开发,说白了,就是要构造和发送http或https的请求组成,并根据请求的返回数据做逻辑处理。 今天就来说一说微信开发第一步,公众号接入以及access_token的管理。 微信公众号接入 ... 阅读详情

相关推荐

微信公众平台服务器的官方示例代码,微信公众平台API接口(示例代码)

简介微信公众平台消息接口开发者提供了一种新的消息处理方式。微信公众平台消息接口开发者提供与用户进行消息交互的能力。对于成功接入消息接口微信公众账号,当用户发消息给公众号,微信公众平台服务器会使用http请求对接入的网址进行消息推送,第三方服务器可通过响应包回复特定结构,从而达到回复消息的目的。申请消息接口点击申请,填写网址url和token,其中token可由开发者可以任意填写用作生成签名...

weixin_34755543的博客 892

微信公众号开发之配置服务器

入口: 附上官方文档 详情的官方文档里面都有,我这边只写一些自己的理解,欢迎补充 URL:开发者用来接收微信消息和事件的接口URL,必须以http://或https://开头,只能是80 和 443 端口 Token : 可由开发者可以任意填写用作生成签名(该Token会和接口URL中包含的Token进行比对,从而验证安全性) 开启服务器时,会调用一次URL,Token 验证通过了才能开启,调用是传递参数如下: 参数 描述 signature 微信加密签名,signatu

myinsert的博客 414

微信开发学习总结(二)——微信开发入门

上一篇《微信开发学习总结(一)—微信开发环境搭建》我们已经完成了微信开发的准备工作,准备工作完成之后,就要开始步入正题了。 一、微信公众平台的基本原理   在开始做之前,先简单介绍了微信公众平台的基本原理。   微信服务器就相当于一个转发服务器,终端(手机、Pad等)发起请求至微信服务器,微信服务器然后将请求转发给我们的应用服务器。应用服务器处理完毕后,将响应数据回发给微信服务器,微信服务器再

洋葱花瓣的专栏 521

个人微信号二次开发的实现,api接口

消息管理:发文本消息、图片消息、名片消息、动图表情、小程序、发文件、发送视频、发送URL链接。群管理:自动创群、修改群名称、邀请新成员、踢群成员、获取群列表、发送邀请链接、获取群聊。好友管理:添加好友、删除好友、修改备注、创建标签、获取好友列表、搜索好友信息。,管理方便有很多功能是没有的,利用微信进行用户管理,其实并不方便。我又瞧到了好玩的微信机器人分享给大家!39: 添加我的方式 我的二维码。各位兄弟姐妹们大家好!

seeseeyoua的博客 822

小程序接入微信支付V3接口开发教程

最近做了一个小程序对接微信支付的需求,查看微信支付文档,还是感觉有点凌乱,所以做一个统一整理,供大家参考。API参考官方文档:https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_8_3.shtml以上便是小程序对接微信支付的全部流程,其他如APP或者H5对接流程大同小异,只不过引用的包有所不同,建议下载开发库wechatpay-java详细阅读以下源码。

yupengfei112233的博客 918

微信二次开发微信开发者模式接入接口JAVA大法

微信官方文档: https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Access_Overview.html 直接上Code(请忽略不规范????): import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org...

OliverCaro的博客 380

为什么开发者需要个人微信API接口?项目接入前需要了解的4个技术前提

开发者选个人微信API接口前需了解4个技术前提,每个前提直接影响项目能否顺利接入和稳定运行。下面按接入前评估维度逐一拆解。

E云管家的专栏 64

如何快速部署wechat-rest?5分钟上手微信机器人开发

wechat-rest是一款功能强大的微信机器人开发框架,支持接入GPT、Gemini、星火等主流大语言模型,通过PC微信API实现消息收发、群管理等自动化操作。本文将带你快速完成部署,5分钟内启动你的第一个微信机器人项目。 ## 📋 部署前准备 ### 环境要求 - 安装Git工具 - 安装Docker环境(推荐)或Go 1.20+开发环境 - 安装PC版微信(Windows系统推荐,Li

gitblog_01123的博客 681

php微信接入,学习php微信开发应用接入API接口笔记

课程地址:http://www.imooc.com/learn/4831、打开自已的微信公众平台·:https://mp.weixin.qq.com2、点击左边底部的基本配置: 3、修改配置 4、填写基本配置URL:我们可以访问的公共地址token:我们可以任意写(token是什么,在这里就不唠叨了)EncodingAESKey:点击随机生成最后点击提交(这时我们提交会失败)why?我们要配置we...

weixin_30726605的博客 258

微信开发(二)开发者模式接口接入

微信开发者模式一些参数简介 1.开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带参数如下表所示: signature 微信加密签名,signature结合了开发者填写token参数和请求中的timestamp参数、nonce参数。 timestamp 时间戳 nonce 随机数 echostr ...

weixin_30407613的博客 336

微信公众服务号接口接入,实现开发回复功能,而非后台设置

参考文档地址:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319 接入概述 接入微信公众平台开发开发者需要按照如下步骤完成: 1、填写服务器配置 2、验证服务器地址的有效性 3、依据接口文档实现业务逻辑   讲到接口接入就不得不提,服务器实现公众号自定义功能;因为,接口

石桥的梦想的博客 6229

Java 接入微信支付API V3 接口开发案例

关于API v3 为了在保证支付安全的前提下,带给商户简单、一致且易用的开发体验,我们推出了全新的微信支付API v3。 相较于之前的微信支付API,主要区别是: 遵循统一的REST的设计风格 使用JSON作为数据交互的格式,不再使用XML 使用基于非对称密钥的SHA256-RSA的数字签名算法,不再使用MD5或HMAC-SHA256 不再要求携带HTTPS客户端证书(仅需携带证书序列号) 使用AES-256-GCM,对回调中的关键信息进行加密保护 最近接微信支付API v3接口,踩了一些坑,

PandaXu123456789的博客 3280

微信蓝牙设备开发之初步接入微信硬件jsapi接口(4)

微信蓝牙设备开发之初步接入微信硬件jsapi接口

linfanhehe的专栏 1万+

使用laravel开发微信公众的一个大坑,适合新手学习的laravel接入微信接口

最近使用laravel做微信公众号二次开发,发现网上能够参考的资料基本上很少,很多地方都讲的不够详细,致使许多新手采坑无数,所以这篇文章讲一下如何使用laravel接入微信接口,实现微信公众号二次开发,顺便也会穿插一些laravel基础知识的讲解。 首先学习之前我们得有一个已经认证过的微信公众号,当然如果你只是学习一下不想花钱的话,点击这里微信公众平台,即可获得一个测试微信号,已经开通了接口,直...

李斌的BLOG 1801

微信公众号+Spring-boot快速开发工具

这个项目基于wechat4j-1.3.1,感于spring boot的火热,在此基础上增加了一些简单的功能以方便开发。 使用说明 如下配置spring boot的application.yml即可使用,个性化开发仍旧使用wechat4j的WechatSupport. application.yml # 你只需要在这里配置微信接口,然后启动spring-boot项目便完成了所有基础配置。...

百年孤独的博客 1758

JAVA微信公众号后台开发 接口接入

前期准备 注册一个公众号,完成认证,阅读开发手册,选取开发工具,配置环境等等。微信公众号开发标准 通过阅读文档我们了解到微信服务器向开发者提供接口,具体的流程如下 由上图可以看出,开发者需要做的:接入接口;解析数据包判断消息类型;设置对于消息的回复;以及部署程序到服务器,而用户和微信服务器之间的通讯我们并不需要关注。接口接入:get 消息的传输:post 消息传输类型: 微信——>开发

keke24的博客 1464

微信公众平台开发----接入微信接口

一、获取自己的域名。 二、设置域名+项目名称和IP地址的映射。 三、配置微信服务器的URL和TOKEN. 四、写好接入程序。最后在微信公众平台配置服务器出提交。

追梦人的博客 1833
上一篇: thinkphp导入文件
下一篇: 关于获取access_token,创建自定义菜单
ssh456
博客等级 码龄8年 52粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值