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

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

时间:2024-05-02 14:28:37

相关推荐

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

后端开发|php教程

string,gt,lt,final,fromUsername

后端开发-php教程

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

免费个人商城系网站统源码,ubuntu移植详细过程,python记忆化爬虫,php sion,Seo工具alzw

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

技术qq交流群:JavaDream:251572072

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

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

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

a.java-jsp版

b.PHP的接口代码:

<?php

/**

? * wechat php test

? */

php新闻发布系统源码,vscode默认缩进,ubuntu磁盘分区指令,起tomcat命令,微软自带的sqlite,phpwind 微信支付插件,ssm框架是前端吗,美丽的汤爬虫,php 数组xml,青岛最好的seo外包,asp sql 网站素材,网页中弹出窗口 页面背景半透明,聊天网站模板下载,获取webbrose页面源码,sql订单管理系统,楼楼分销小程序源码lzw

//define your token

define(“TOKEN”, “weixin”);

$wechatObj = new wechatCallbackapiTest();

$wechatObj->valid();

php源码采集,vscode 使用bash,ubuntu启动卡在B7,tomcat 去项目,安卓sqlite条数,优化插件,web前端初学学什么框架,天医下山网络爬虫,php匹配url,seo站内属性,小清新博客网站,网页预览pdf插件,骑行活动模板,用易语言写的程序能不能按键精灵神盾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的格式和消息的发送方式等。

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