失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 微信大众开放平台开发02-微信公众平台PHP接口和java接口对比

微信大众开放平台开发02-微信公众平台PHP接口和java接口对比

时间:2022-09-10 14:02:48

相关推荐

微信大众开放平台开发02-微信公众平台PHP接口和java接口对比

后端开发|php教程

nbsp,quot,string,gt,lt

后端开发-php教程

微信公众开放平台开发02—微信公众平台PHP接口和java接口对比

cjson源码下载,vscode中好用的功能,启动ubuntu usb,tomcat主备架构,直播类爬虫,内容发布系统 php,抖音seo企业服务广场,电影诱导单页模板网站,供求信息网模板lzw

微信公众开放平台开发02—微信公众平台PHP接口和java接口对比

技术qq交流群:JavaDream:251572072

———————————–

这一节中的代码收集于网友的制作

——————————————-

a.java-jsp版

b.PHP的接口代码:

<?php

/**

* wechat php test

*/

项目开发案例全程实录源码,vscode好用的功能,ubuntu驱动入门,tomcat设置的jvm,fawk 爬虫,php调用swf,浙江正规seo优化排行,网站底部网址导航栏代码,手机端考试模板下载地址lzw

//define your token

define(“TOKEN”, “weixin”);

$wechatObj = new wechatCallbackapiTest();

$wechatObj->valid();

国外的源码网站,vscode列式编辑快捷键,ubuntu查看ram,tomcat停止war包,爬虫以后发现,php longval,有利于seo的响应式,大型门户网站是这样炼成的 源码lzw

class wechatCallbackapiTest

{

public function valid()

{

$echoStr = $_GET[“echostr”];

//valid signature , option

if($this->checkSignature()){

echo $echoStr;

exit;

}

}

public function responseMsg()

{

//get post data, May be due to the different environments

$postStr = $GLOBALS[“HTTP_RAW_POST_DATA”];

//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 = “

<![CDATA[%s]]>

<![CDATA[%s]]>

%s

<![CDATA[%s]]>

<![CDATA[%s]]>

0

“;

if(!empty( $keyword ))

{

$msgType = “text”;

$contentStr = “Welcome to wechat world!”;

$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);

echo $resultStr;

}else{

echo “Input something…”;

}

}else {

echo “”;

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;

}

}

}

?>

————————————————–

c.java版接口

<%

//WeiXinHandler为内部类不能使用非final类型的对象

final String TOKEN=”weixin”;

final HttpServletRequest final_request=request;

final HttpServletResponse final_response=response;

%>

<%

class WeiXinHandler{

public void valid(){

String echostr=final_request.getParameter(“echostr”);

if(null==echostr||echostr.isEmpty()){

responseMsg();

}else{

if(this.checkSignature()){

this.print(echostr);

}else{

this.print(“error”);

}

}

}

//自动回复内容

public void responseMsg(){

String postStr=null;

try{

postStr=this.readStreamParameter(final_request.getInputStream());

}catch(Exception e){

e.printStackTrace();

}

//System.out.println(postStr);

if (null!=postStr&&!postStr.isEmpty()){

Document document=null;

try{

document = DocumentHelper.parseText(postStr);

}catch(Exception e){

e.printStackTrace();

}

if(null==document){

this.print(“”);

return;

}

Element root=document.getRootElement();

String fromUsername = root.elementText(“FromUserName”);

String toUsername = root.elementText(“ToUserName”);

String keyword = root.elementTextTrim(“Content”);

String time = new Date().getTime()+””;

String textTpl = “”+

“<![CDATA[%1$s]]>”+

“<![CDATA[%2$s]]>”+

“%3$s”+

“<![CDATA[%4$s]]>”+

“<![CDATA[%5$s]]>”+

“0”+

“”;

if(null!=keyword&&!keyword.equals(“”))

{

String msgType = “text”;

String contentStr = “Welcome to wechat world!”;

String resultStr = textTpl.format(textTpl, fromUsername, toUsername, time, msgType, contentStr);

this.print(resultStr);

}else{

this.print(“Input something…”);

}

}else {

this.print(“”);

}

}

//微信接口验证

public boolean checkSignature(){

String signature = final_request.getParameter(“signature”);

String timestamp = final_request.getParameter(“timestamp”);

String nonce = final_request.getParameter(“nonce”);

String token=TOKEN;

String[] tmpArr={token,timestamp,nonce};

Arrays.sort(tmpArr);

String tmpStr=this.ArrayToString(tmpArr);

tmpStr=this.SHA1Encode(tmpStr);

if(tmpStr.equalsIgnoreCase(signature)){

return true;

}else{

return false;

}

}

//向请求端发送返回数据

public void print(String content){

try{

final_response.getWriter().print(content);

final_response.getWriter().flush();

final_response.getWriter().close();

}catch(Exception e){

}

}

//数组转字符串

public String ArrayToString(String [] arr){

StringBuffer bf = new StringBuffer();

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

bf.append(arr[i]);

}

return bf.toString();

}

//sha1加密

public String SHA1Encode(String sourceString) {

String resultString = null;

try {

resultString = new String(sourceString);

MessageDigest md = MessageDigest.getInstance(“SHA-1”);

resultString = byte2hexString(md.digest(resultString.getBytes()));

} catch (Exception ex) {

}

return resultString;

}

public final String byte2hexString(byte[] bytes) {

StringBuffer buf = new StringBuffer(bytes.length * 2);

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

if (((int) bytes[i] & 0xff) < 0x10) {

buf.append(“0”);

}

buf.append(Long.toString((int) bytes[i] & 0xff, 16));

}

return buf.toString().toUpperCase();

}

//从输入流读取post参数

public String readStreamParameter(ServletInputStream in){

StringBuilder buffer = new StringBuilder();

BufferedReader reader=null;

try{

reader = new BufferedReader(new InputStreamReader(in));

String line=null;

while((line = reader.readLine())!=null){

buffer.append(line);

}

}catch(Exception e){

e.printStackTrace();

}finally{

if(null!=reader){

try {

reader.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

return buffer.toString();

}

}

%>

<%

WeiXinHandler handler=new WeiXinHandler();

handler.valid();

%>

—————————————–

d.以上就是PHP接口和JSP接口的所有代码,

现在我们来对一些需要注意的地方做下分析:

首先的从总体看的话,jsp要比PHP繁琐一些,因为很多函数需要自己写,

像sha1加密,解析xml字符串等都需要自己找第三方的库。

第一点,我们要获取微信公众平台给jsp发送的post或get参数,正常情况下都是用request.getParameter就可以获取到,

但是在写的过程中发现PHP是这样获取

$postStr = $GLOBALS[“HTTP_RAW_POST_DATA”];

这时通过查询一些资料知道这样获取的是无法通过$_GET或$_POST函数得到的”未识别 MIME 类型的数据“,原始的 POST 数据

所以这里使用获取原始数据流的方式来解析post的xml数据

String postStr=null;

try{

postStr=this.readStreamParameter(final_request.getInputStream());

}catch(Exception e){

e.printStackTrace();

}

—————————————————–

//从输入流读取post参数

public String readStreamParameter(ServletInputStream in){

StringBuilder buffer = new StringBuilder();

BufferedReader reader=null;

try{

reader = new BufferedReader(new InputStreamReader(in));

String line=null;

while((line = reader.readLine())!=null){

buffer.append(line);

}

}catch(Exception e){

e.printStackTrace();

}finally{

if(null!=reader){

try {

reader.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

return buffer.toString();

}

————————————————————–

第二个,是response消息返回给微信平台,我尝试的用最一般的out.print去做,但是发现没反应,观察PHP的代码写法

echo “”;

exit;

——————

猜想可能需要有个刷新的操作才能把消息response回去,于是找了下response内的一些函数做出以下尝试

//向请求端发送返回数据

public void print(String content){

try{

final_response.getWriter().print(content);

final_response.getWriter().flush();

final_response.getWriter().close();

}catch(Exception e){

}

}

—————————————

关于微信公众平台的消息接口的详细介绍,可以参看微信公众平台的官方文档,里面介绍了消息的xml的格式和消息的发送方式等。

如果觉得《微信大众开放平台开发02-微信公众平台PHP接口和java接口对比》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。