公众号java 视频_Java 微信公众号平台接入 视频

查看原文观看视频:http://www.ibloger.net/article/272.html

官方PHP接入文件注释介绍

/**

* wechat php test 表明php语句的说明和开始,表示此为php语言

*/

// 定义 token

define("TOKEN", "weixin");

$wechatObj = new wechatCallbackapiTest(); // 实例化当前class类

$wechatObj->valid(); // $webchatObj变量—>访问类中valid()方法

class wechatCallbackapiTest // 定义一个类,类名是class后的内容

{

public function valid() // 定义一个共有的名为valid的方法

{

$echoStr = $_GET["echostr"]; // 从微信用户获取一个随机变量$echoStr

//验证签名signature , 可选

if($this->checkSignature()){

echo $echoStr; // 如果签名相同,输出$echostr变量

exit;

}

}

public function responseMsg() // 以下是一个公有的responseMsg的方法,是这段代码的核心内容,获得微信用户段发来的信息,不同环境有所不同

{

//get post 数据, 可能是由于不同的环境

$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];// 将信息保存到变量$postStr中,同时解析用户数据

//提取post数据

if (!empty($postStr)){ // 如果用户端数据不为空

/* libxml_disable_entity_loader是防止XML外部实体注入,最好的办法就是自己检查XML的有效性 */

libxml_disable_entity_loader(true);

$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); // 将变量$postStr解析并赋予变量$postObj

$fromUsername = $postObj->FromUserName; // 将用户端的用户名赋予变量$fromUsername

$toUsername = $postObj->ToUserName; // 将公众号ID赋予变量$toUsername

$keyword = trim($postObj->Content); // 将发来的文本内容去空格后赋予变量$keyword

$time = time(); // 将系统时间赋予变量$time

// 构建XML格式的文本赋予变量$textTp1(ToUserName:微信目标方,FromUserName:微信来远方,CreateTime:系统时间,MsgType:回复微信信息类型,Content:回复微信内容,FuncFlag:是否为星标微信)

$textTpl = "

%s

0

";

if(!empty( $keyword )) { // 如果用户端发来的消息不是空

$msgType = "text"; // 回复文本消息为text文本类型

$contentStr = "欢迎来到 wechat 世界!"; // 这行就是我们进行文本回复的内容,如果要改回复的消息,只要在这里更改就可以

$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); // 将XML格式中的变量分别赋值,

echo $resultStr; // 输出回复消息

}else{

echo "Input something..."; // 输入内容,此消息不会发送到微信端,只是测试时候使用

}

}else {

echo "";

exit;

}

}

private function checkSignature() // 建立私有方法验证签名

{

// 你必须定义一个自己的TOKEN

if (!defined("TOKEN")) {

throw new Exception('TOKEN 未定义!');

}

$signature = $_GET["signature"]; // 从用户端获取签名赋予变量$signature

$timestamp = $_GET["timestamp"]; //从用户段获取时间赋予变量$timestamp

$nonce = $_GET["nonce"]; // 从用户段获取随机数赋予变量$snonce

$token = TOKEN; // 将常量TOKEN值赋予变量$token

$tmpArr = array($token, $timestamp, $nonce); // 建立数组变量$tmpArr

sort($tmpArr, SORT_STRING); // 数组排序

$tmpStr = implode( $tmpArr ); // 字典排序

$tmpStr = sha1( $tmpStr ); // 加密

if( $tmpStr == $signature ){ // 判断$tmpStr与$signature变量是否同值

return true;

}else{

return false;

}

}

}

?>接下来使用Java版本接入

微信请求校验类

package cn.weixin.validationTest;

import java.security.MessageDigest;

import java.util.Arrays;

/**

* 微信请求校验工具类

* @author X-rapido

* @version 1.0

*/

public class ValidationUtil{

private static String token="Rapido";// 用户Token

/**

* 验证签名

*/

public static boolean checkSignauer(String signature,String timestamp,String nonce){

// 构建成一个字符串数组

String [] str = new String[]{token,timestamp,nonce};

Arrays.sort(str); // 排序

StringBuffer buff = new StringBuffer();

for (int i = 0; i < str.length; i++) {

buff.append(str[i]);

}

MessageDigest md = null; // 加密类

String result = null;

try {

md = MessageDigest.getInstance("SHA-1"); // 实例加密算法(微信文档中用SHA-1)

byte[] digest = md.digest(buff.toString().getBytes());

result = bytesToStr(digest);

System.out.println("加密以后的字符串:"+result);

} catch (Exception e) {

e.printStackTrace();

}

return result != null? result.equals(signature.toUpperCase()) : false;

}

/**

* 将字节数组转换为16进制字符串

* @param byteArray

* @return

*/

private static String bytesToStr(byte[] byteArray){

String strDigest = "";

for (int i = 0; i < byteArray.length; i++) {

strDigest += byteToHexStr(byteArray[i]);

}

return strDigest;

}

/**

* 将一个字节转换为16进制字符串

* @param mByte

* @return

*/

private static String byteToHexStr(byte mByte){

char [] digit={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

char [] temp = new char[2];

temp[0] = digit[(mByte>>>4) & 0X0F];

temp[1] = digit[mByte & 0X0F];

String s = new String(temp);

return s;

}

}

微信测试接入类

package cn.weixin.servlet;

import java.io.IOException;

import java.io.PrintWriter;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import cn.weixin.common.ValidationUtil;

/**

* 接收来自微信服务器转发过来的请求[验证消息真实性]

*

* @author X-rapido

*

*/

public class AccessVerifyServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

String signature = request.getParameter("signature"); // 获取微信加密的签名字符串

String timestamp = request.getParameter("timestamp"); // 时间戳

String nonce = request.getParameter("nonce"); // 随机数

String echostr = request.getParameter("echostr");// 随机字符串

System.out.println("加密的签名串signatur:"+signature+",时间戳timestamp:"+timestamp+",随机数nonce:"+nonce+",随机字符串echostr:"+echostr);

PrintWriter out = response.getWriter();

if(ValidationUtil.checkSignauer(signature, timestamp, nonce)){

out.print(echostr);

}

out.close();

}

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

doGet(request, response);

}

}web.xml

weixin

index.html

index.htm

index.jsp

微信接入验证

AccessVerifyServlet

cn.weixin.servlet.AccessVerifyServlet

AccessVerifyServlet

/AccessVerifyServlet

在一下联接中使用

f36820e37351c2192c683eb973d43166.png

微信在接入时候,会以get数据请求我的url地址,我的Servlet就会接收数据,并进行签名认证返回接收的随机数,微信服务器接收随机数并进行签名认证,确定后就接入成功!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值