微信公众平台接口开发教程
微信接口开发公众号开发经验分享——接口开发案例代码

微信接口开发公众号开发经验分享——接口开发案例代码微信媒体图片下载string mediaid=;//上传素材得到的mediaidstring accesstoken=wxAPI.GetAccessTokenCachesql();stringurl="/cgi-bin/media/get?access_token="+accesstoken+"&media_id="+mediaid;WebClient MyClient = new WebClient();MyClient.DownloadFile(url, Server.MapPath("UpFiles/" +mediaid+".jpg")); //保存临时图片公众号微支付接口操作步骤1.支付配置,如下面一笑脸所讲2.通过统一下单返回返回prepay_id,即将订单信息提交给统一下单接口,并返回支付接口给的统一支付ID即prepay_id,其中payback.aspx //支付成功回调地址或是支付成功处理页面例如:string sql = "select * from shop_jiayuan_paylist where order_sn='" + ordersn + "'";Socut.Reader dr = new Socut.Reader(sql);string stuid = "", SemesterID = "";string oldpayid = "", oldpayidDT = "";if (dr.Read()){stuid = dr["stuid"].ToString().Trim();jiayuanmoney = dr["money"].ToString().Trim();totalprice = jiayuanmoney; //支付总金额SemesterID = dr["SemesterID"].ToString().Trim();ispay = dr["ispay"].ToString().Trim();oldpayid = dr["payid"].ToString().Trim();oldpayidDT = dr["getpayidDT"].ToString().Trim();orderid = dr["id"].ToString().Trim();}dr.Close();xq = Socut.Data.ExecuteScalar("select SemesterName from Semester where SemesterID=" + SemesterID).ToString().Trim();stuname = Socut.Data.ExecuteScalar("select stuname from student where stuid=" + stuid).ToString().Trim();//开始获取统一下单payIDif (ispay == "0"){//判断oldpayid的时效,if (oldpayidDT != ""){DateTime olddt = Convert.ToDateTime(oldpayidDT);DateTime nowdt = DateTime.Now;if (olddt.AddMinutes(100) < nowdt)//表示此payid已过期需要重新获取{oldpayid = "";}}//还未支付,调起支付接口------------------------------if (ispay == "0"){string URL = "https:///pay/unifiedorder";StringBuilder sbXml = new StringBuilder();// Response.Write("<xml><appid>123</appid></xml>"); return;string xmlattach = "pay";string dealbody = "订单支付:" + ordersn;string dealdetail = "支付订单号:" + ordersn;string notify_url = "http://" + XPFunction.GetAppKey("domain") + "/jiayuan/payback.aspx"; //支付成功回调地址或是支付成功处理页面string paywxh = wxh;string payOrderNO = ordersn; //订单号string paymoney = Convert.ToString((int)(Convert.ToDouble(totalprice) * 100));//以分为单位的支付金额if (oldpayid == "") //oldpayid == ""未获取过payid或已经过期{sbXml.AppendLine(@"<xml>");sbXml.AppendLine(@"<appid><![CDATA[" + wxAPI.AppID + "]]></appid>");sbXml.AppendLine(@"<attach><![CDATA[" + xmlattach + "]]></attach>");//附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据sbXml.AppendLine(@"<body><![CDATA[" + dealbody + "]]></body>"); //商品或支付单简要描述sbXml.AppendLine(@"<detail><![CDATA[" + dealdetail + "]]></detail>"); //商品名称明细列表sbXml.AppendLine(@"<mch_id>" + wxAPI.MCH_ID + "</mch_id>"); //商户号sbXml.AppendLine(@"<nonce_str><![CDATA[" + wxAPI.nonceStr + "]]></nonce_str>"); //随机字符串sbXml.AppendLine(@"<notify_url><![CDATA[" + notify_url + "]]></notify_url>"); //回调地址sbXml.AppendLine(@"<openid><![CDATA[" + paywxh + "]]></openid>"); //发起支付的用户OPENIDsbXml.AppendLine(@"<out_trade_no>" + payOrderNO + "</out_trade_no>"); //商户订单号自己设定不得重复,二次支付时使用同一单号sbXml.AppendLine(@"<spbill_create_ip><![CDATA[" + XPFunction.GetClientIP() + "]]></spbill_create_ip>");sbXml.AppendLine(@"<total_fee>" + paymoney + "</total_fee>"); //订单总金额单位为分只能提交整数sbXml.AppendLine(@"<trade_type><![CDATA[JSAPI]]></trade_type>"); //接口调用类型////获取统一下单sign-----------------string[] arrtmp = new string[12];arrtmp[0] = "appid=" + wxAPI.AppID;arrtmp[1] = "attach=" + xmlattach;arrtmp[2] = "body=" + dealbody;arrtmp[3] = "mch_id=" + wxAPI.MCH_ID;arrtmp[4] = "nonce_str=" + wxAPI.nonceStr;arrtmp[5] = "notify_url=" + notify_url;arrtmp[6] = "openid=" + paywxh;arrtmp[7] = "out_trade_no=" + payOrderNO; //支付订单号arrtmp[8] = "spbill_create_ip=" + XPFunction.GetClientIP();arrtmp[9] = "total_fee=" + paymoney;arrtmp[10] = "trade_type=JSAPI";arrtmp[11] = "detail=" + dealdetail;Array.Sort(arrtmp);string tmpStr = string.Join("&", arrtmp);tmpStr = tmpStr + "&key=" + wxAPI.APIkey;string sign = XPFunction.MD5(tmpStr).ToUpper();////获取统一下单sign-----------------sbXml.AppendLine(@"<sign>" + sign + "</sign>");sbXml.AppendLine(@"</xml>");//读取payidDataSet ds = new DataSet();ds.ReadXml(wxAPI.PostWebRequestStream(URL, sbXml.ToString())); //Response.Write(ds.Tables[0].Rows[0][0].ToString().Trim().ToUpper()); if (ds.Tables[0].Rows[0][0].ToString().Trim().ToUpper() == "SUCCESS") {if (ds.Tables[0].Rows[0][6].ToString().Trim().ToUpper() == "SUCCESS"){PAYID = ds.Tables[0].Rows[0][7].ToString(); //读取payidSocut.Data.ExecuteNonQuery("update shop_jiayuan_paylist set payid='" + PAYID + "',getpayidDT='" + DateTime.Now.ToString() + "' where id=" + orderid); //记录此订单的支付ID,二次调用时不再重新获取}}else{PAYID = "";//获取失败}}else{PAYID = oldpayid;}if (PAYID != ""){////获取支付接口的sign-----------string[] arrtmp2 = new string[5];arrtmp2[0] = "appId=" + wxAPI.AppID;arrtmp2[1] = "timeStamp=" + wxAPI.timestamp;arrtmp2[2] = "nonceStr=" + wxAPI.nonceStr;arrtmp2[3] = "package=prepay_id=" + PAYID;arrtmp2[4] = "signType=MD5";Array.Sort(arrtmp2);string tmpStr2 = string.Join("&", arrtmp2);tmpStr2 = tmpStr2 + "&key=" + wxAPI.APIkey;WXPaysign = XPFunction.MD5(tmpStr2).ToUpper();////获取支付接口的sign-----------}else //支付接口调用失败{WXPaysign = "";}}}3. 通过调用JS接口wx.chooseWXPay接口调用方法如下:支付按钮wxpay,单击时执行savepay2()的方法<input id="wxpay" name="wxpay" type="button" value="立即支付" onclick="savepay2();" />function savepay2() {var signtxt = '<%=WXPaysign%>';if (signtxt == ""){alert("支付失败,请重试!");return;//微信支付wx.chooseWXPay({timestamp: '<%=wxAPI.timestamp%>', // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。
微信公众平台开发教程(三)基础框架搭建

微信公众平台开发教程(三)基础框架搭建微信公众平台开发教程(三)基础框架搭建上⼀章,我们已经初步讲解了微信公众账号开发的基本原理,今天我们来探索设计实现。
⾸先我们设计了模块层次图,当然图中只是给出⼀种实现⽅式,不局限于此。
具体见下图。
主要功能介绍如下:1)请求接⼝层。
处理HTTP请求,及响应2)分发层。
由接⼝层传⼊请求,然后具体分析请求类型,分发⾄不同的处理器3)业务逻辑层。
这⾥是我们的具体业务逻辑了,根据请求,实现具体的业务逻辑。
4)数据层。
我们在实现某个应⽤时可能需要访问数据,可以是数据库或者是⽂件。
如果是简单应⽤,可能没有这⼀层。
其实,具体的应⽤可以在这个结构上去扩展,可以扩展消息对象层、业务对象层、数据访问层、功能管理层等。
这⾥只是提供⼀种思路,不局限于此。
根据层次图,设计流程图,具体讲述实现的各个过程。
以便了解整个处理过程。
如下图所⽰:根据流程图,我们能够清晰的了解整个流程,消息处理的具体实现步骤。
下⾯我们针对每个流程进⾏代码实现。
⼀、接收HTTP请求我们需要⼀个HttpHandler或者⼀个⽹页,来处理微信服务端HTTP请求。
这⾥我们使⽤了HttpHandler。
因为其灵活性⾼,性能好。
具体实现如下。
public class WeiXinHttpHandler:IHttpHandler{///<summary>//////</summary>public bool IsReusable{get { return true; }}///<summary>///处理请求///</summary>///<param name="context"></param>public void ProcessRequest(HttpContext context){//由微信服务接收请求,具体处理请求WeiXinService wxService = new WeiXinService(context.Request);string responseMsg = wxService.Response();context.Response.Clear();context.Response.Charset = "UTF-8";context.Response.Write(responseMsg);context.Response.End();}}如果是HTTPHandler,需要在配置⽂件中,配置具体的应⽤。
微信公众平台接口开发指南

微信公众平台接口开发指南注册成为开发者注册公众账号,需要登记自己的真实身份信息注意:设置公众号信息时一定要谨慎,‘公众号名称’与‘微信号’填写后是不能修改的,需事先认真想好注册完成后,进入系统,选择导航上的‘高级功能’其中有两个模式:‘编辑模式’与‘开发模式’默认开启的为‘编辑模式’进入‘编辑模式’,点击右上角的‘关闭’链接进入‘开发模式’,点击右上角的‘开启’按钮开启后可以看到:点击‘成为开发者’URL、TOKEN认证成为开发者的第一步就是填写URL、TOKEN信息,来对你服务器进行验证1)把下面代码复制并保存为一个php文件(如weixin.php)<?php/*** wechat php test*///define your tokendefine("TOKEN", "weixin");$wechatObj = new wechatCallbackapiTest();$wechatObj->valid();class wechatCallbackapiTest{public function valid(){$echoStr = $_GET["echostr"];//valid signature , optionif($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 dataif (!empty($postStr)){$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDA TA);$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><![CDA TA[%s]]></MsgType><Content><![CDATA[%s]]></Content><FuncFlag>0</FuncFlag></xml>";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;}}}?>2)修改TOKENTOKEN是用来进行交互安全认证的,你自己随意定义,注意保证安全定义后修改代码,在代码顶部找到define("TOKEN", "weixin");把值改为你自己的TOKEN值(如:mytoken),保存文件,然后上传到服务器,要确保可以访问3)填写URL TOKEN信息回到公众平台页面,把URL TOKEN信息填写后提交,需要保证URL与上传的php文件地址一致,并且TOKEN值与php中定义的一致信息填写正确后提交,正常会提示完成信息至此,已经正式成为了开发者,接下来就可以安装自己的思路开发程序了微信交互示例做一个简单的示例:用户发送什么文字,我们就回复什么文字注意:复制代码后要把TOKEN值修改为自己的<?php/*** wechat php test*///define your tokendefine("TOKEN", "xxx");$str = '';$wechatObj = new wechatCallbackapiTest();$wechatObj->valid();class wechatCallbackapiTest{public function valid(){$echoStr = $_GET["echostr"];//valid signature , optionif($this->checkSignature()){echo $echoStr;$this->responseMsg();exit;}}public function responseMsg(){//get post data, May be due to the different environments$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];//extract post dataif (!empty($postStr)){$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDA TA);$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><![CDA TA[%s]]></MsgType><Content><![CDATA[%s]]></Content><FuncFlag>1</FuncFlag></xml>";if(!empty( $keyword )){$msgType = "text";$contentStr = $keyword;$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;}}}?>用户关注后发送欢迎信息在实际应用中,用户第一次关注是,我们需要发送欢迎和提示信息,就需要下面的判断代码if($keyword === "Hello2BizUser"){$contentStr = "欢迎信息";}开发文档中写明,用户关注后服务器自动发送过来的字符串为"Hello2BizUser",我们就依次来判断了注意:信息模板中此项<FuncFlag>1</FuncFlag>的值要设为1,这样用户微信中才会显示有新消息的标志此文档总结了微信公众平台开发的起步过程,接下来就需要大家发挥自己创造力了,祝大家开发出更多更有益的应用。
微信公众平台开发教程

微信公众平台开发教程微信公众平台开发教程已经成为许多开发者关注的热点话题。
在这篇文章中,我将以500字为限,为大家简要介绍一下微信公众平台开发的基本流程和注意事项。
首先,我们需要在微信公众平台上注册一个开发者账号。
在注册完成后,我们可以获得一个唯一的AppID和AppSecret。
这些信息将用于后续开发过程中的身份验证和接口调用。
接下来,我们需要在本地搭建一个开发环境。
根据自己的技术栈选型,我们可以选择使用Java、Python、Node.js等语言进行开发。
我们还需要下载安装相应的开发工具或者框架,并配置好环境变量。
在开发环境搭建完成后,我们可以开始进行具体的开发工作。
微信公众平台提供了丰富的接口和功能供开发者使用。
我们可以通过接口实现公众号的基本功能,如接收和回复消息、获取用户基本信息等。
同时,我们还可以借助微信支付接口实现在线支付功能,以及调用其他第三方接口实现更复杂的功能。
在开发过程中,我们需要特别注意微信公众平台的规范和限制。
微信公众平台的接口调用频率有限,所以我们需要合理利用接口调用次数。
另外,我们需要遵循微信公众平台的开发文档和规范,确保开发的功能和界面与微信的设计风格一致,给用户带来良好的体验。
最后,我们需要进行测试和部署。
在代码开发完成后,我们需要进行全面的测试,确保功能的正确性和稳定性。
同时,我们还需要将代码部署到服务器上,并配置好相应的域名和IP地址。
这样,我们的公众号才能在微信中被访问和使用。
综上所述,微信公众平台开发教程是一个相对复杂的过程,需要开发者有一定的编程基础和相关知识。
希望通过这篇文章的介绍,可以对微信公众平台开发有一个初步的了解。
当然,如果你对微信公众平台开发感兴趣,还需要进一步学习和实践才能掌握更深入的技术和经验。
微信公众平台开发教程

公众平台开发教程公众平台开发教程1:概述1.1 什么是公众平台1.2 公众平台的作用1.3 公众平台开发的基本流程2:注册与配置2.1 注册公众平台账号2.2 配置开发者权限2.3 创建自定义菜单2.4 增加关注欢迎语2.5 设置自定义回复消息3:消息处理3.1 接收用户消息3.2 处理用户消息3.3 发送客服消息3.4 接收地理位置消息3.5 接收事件消息4:素材管理4.1 临时素材4.2 临时素材4.3 永久素材4.4 永久素材4.5 素材管理API调用示例5:用户管理5.1 获取用户基本信息5.2 获取用户列表5.3 获取用户分组5.4 管理用户分组5.5 用户标签管理5.6 用户管理6:账号管理7:网页授权7.1 用户授权流程7.2 获取授权用户信息7.3 刷新和验证授权8:数据统计8.1 用户分析数据接口8.2 图文分析数据接口8.3 消息分析数据接口8.4 接口分析数据接口附件:- 附带源代码示例- 附带案例演示文件法律名词及注释:1:公众平台:由腾讯公司开发和运营的一个公众号管理平台,提供了丰富的功能和接口,供开发者开发和管理公众号。
2:开发者权限:在公众平台注册开发者账号后,获取的一系列权限,包括菜单配置、消息处理、素材管理等。
3:自定义菜单:允许公众号开发者在中自定义菜单,方便用户交互和导航功能。
4:关注欢迎语:当用户关注公众号后,显示给用户的欢迎消息。
5:自定义回复消息:根据用户发送的消息自动回复相应的内容,提供个性化的用户体验。
Python与微信开发使用Python构建微信公众号和小程序

Python与微信开发使用Python构建微信公众号和小程序Python与微信开发微信是目前全球最大的社交媒体平台之一,拥有庞大的用户群体和丰富的功能。
而Python作为一种简单易学、功能强大的编程语言,被广泛用于各个领域的开发。
在本文中,我们将探讨如何使用Python构建微信公众号和小程序。
一、微信公众号开发1. 准备工作在进行微信公众号开发之前,首先需要在微信公众平台上注册一个账号,并创建一个公众号。
注册完成后,可以获得一个官方提供的AppID和AppSecret,这是我们进行开发的必备信息。
2. Python库安装为了方便进行微信公众号开发,我们可以使用Python的第三方库`wechatpy`。
通过在命令行中运行`pip install wechatpy`命令,即可完成库的安装。
3. 接入微信公众号平台在开始编写代码之前,我们需要将自己的服务器接入微信公众平台,并进行配置。
具体步骤如下:(1)将服务器地址填写到微信公众平台的服务器配置中,并设置一个Token作为身份验证的凭证。
(2)在服务器上编写一个用于接收和处理微信消息的处理函数。
4. 开发公众号功能通过使用`wechatpy`库提供的API和功能,我们可以轻松地实现微信公众号的各种功能,包括:(1)自动回复消息:可以根据用户的不同消息类型,自动回复相应的内容。
(2)菜单功能:可以创建自定义菜单,方便用户进行交互。
(3)消息群发:可以向指定用户或用户群体发送消息。
(4)用户管理:可以获取用户信息,并进行相关管理。
二、小程序开发微信小程序是一种运行在微信平台上的轻量级应用程序,可以实现各种丰富的功能。
使用Python进行小程序开发需要以下几个步骤:1. 注册小程序账号首先,需要注册一个小程序账号,并登录到微信小程序后台。
在后台可以获取到小程序的AppID。
2. 安装Python库为了方便进行小程序开发,我们可以使用Python的第三方库`wepy`。
微信公众平台开发教程

公众平台开发教程公众平台开发教程一:概述1.1 什么是公众平台公众平台是一个提供给公众号运营者进行管理和开发的平台,通过该平台,运营者可以创建并管理自己的公众号,并通过开发接口和功能,实现更多的个性化服务。
1.2 公众号类型有订阅号、服务号、企业等不同类型的公众号,不同类型的公众号在功能和权限上有所区别。
1.3 开发准备工作在进行开发前,需要注册成为公众号的开发者,并获取开发者ID和密钥等信息。
二:公众平台接口2.1 服务器配置配置服务器,将接收消息和事件的URL地址与公众号进行绑定。
2.2 接收消息通过开发接口,接收用户发送的文本、图片、语音、视频等消息。
2.3 发送消息开发接口,实现向用户发送文本、图片、语音、视频等消息。
2.4 用户管理通过开发接口,获取用户的基本信息,实现对用户进行管理。
2.5 素材管理开发接口,用于、、删除公众号的图片、语音、视频等素材。
三:高级功能开发3.1 自定义菜单创建自定义菜单,实现公众号的个性化菜单设置。
3.2 模板消息开发接口,用于向用户发送模板消息,实现消息的定制化。
3.3 网页授权通过网页授权,获取用户的基本信息及访问权限,实现网页的个性化展示。
3.4 客服功能开发接口,实现与用户的实时对话功能,提供更好的客户服务。
3.5 数据统计获取公众号的用户、消息、菜单等统计数据,进行数据分析和优化。
四:开发工具推荐4.1 公众号开发文档介绍公众平台开发文档的使用方法和注意事项。
4.2 开发工具推荐一些常用的开发工具,如开发者工具、Postman等。
4.3 开发资源提供一些开发资源的,如常见问题、开发案例等。
4.4 其他参考资料给出一些其他有关公众平台开发的参考资料推荐。
附件:附件1:公众平台开发接口文档附件2:公众平台开发示例代码法律名词及注释:1. 公众号:平台上的一种类型账号,由个人、企业、机构等注册并管理,用于向用户提供信息和服务。
2. 开发者ID:公众平台开放给开发者的唯一标识,用于接口调用和认证。
微信公众平台开发(系列教程)

微信公众平台开发(系列教程)⼀、简介微信公众平台是腾讯公司在微信的基础上新增的功能模块,通过这⼀平台,个⼈和企业都可以打造⼀个微信的公众号,并实现和特定群体的⽂字、图⽚、语⾳的全⽅位沟通、互动。
⼆、通讯机制三、注册微信平台公众帐号四、服务器端配置4.1 ⽰例代码设置微信公众平台提供了⼀个php⽰例代码:下载下来,解压缩,打开编辑。
将token值设置为你所需要的值,token可由开发者任意填写,⽤作⽣成签名。
编辑完保存并关闭⽂件,将⽂件wx_sample.php 更改成⾃定义的名字,这⾥改为wxapi.php,再次打包成wxapi.zip。
4.2 服务器平台设置4.2.1 百度BAE设置a. 注册BAE帐户并登录b. 加⼊开发者中⼼c. 创建应⽤接⼊⽅式选择 “⼿机web应⽤”。
d. 托管设置选择云环境(BAE)-> 托管设置。
环境类型选择 “PHP”。
e. 创建新版本,上传接⼝⽂件f. 上线并获取链接注:zhuojinsz 之前已经被我注册过了,所以不能再次注册。
这⾥应该获得的⼆级域名应该和上⾯的截图中写的⼀样。
BAE 设置完毕。
4.2.2 新浪SAE设置a. 注册SAE帐户并登录b. 创建新应⽤我的⾸页 -> 创建新应⽤c. 配置应⽤d. 上传代码应⽤管理 -> 代码管理 -> 上传代码包e. 获取URL地址SAE 配置完毕。
五、配置接⼝5.1 登录微信公众平台 -> ⾼能功能 -> 开发模式5.2 成为开发者5.3 接⼝配置信息Token 填写⾃定义的token 值,这⾥为zhuojinsz。
5.4 提交点击 “提交”,若⼀切设置正确,则会提⽰ “提交成功”。
5.5 查看接⼝配置信息BAE 接⼝信息SAE 接⼝信息5.6 开启开发模式⾄此,配置完毕。
六、关注请关注卓锦苏州微信公众帐号,卓锦苏州基于SAE 平台开发,针对于主流的微信功能进⾏开发测试。
您可以关注卓锦苏州公众帐号进⾏功能测试,以及获取新的应⽤开发。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
if( $tmpStr == $signature ){ return true;
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$fromUsername = $postObj->FromUserName; $toUsername = $postObj->ToUserName; $keyword = trim($postObj->Content); $time = time(); $textTpl = "<xml>
class wechatCallbackapiTest {
public function valid() {
$echoStr = $_GET["echostr"];
//valid signature , option if($this->checkSignature()){
echo $echoStr; $this->responseMsg(); exit; } }
}else{ return false;
} } }
?>
z ⭘ᡧ⌘ޣਾਁ䘱⅒䗾ؑ
൘ᇎ䱵ᓄ⭘ѝˈ⭘ᡧㅜа⅑⌘ޣᱟˈᡁԜ䴰㾱ਁ䘱⅒䗾઼ᨀ皮ؑˈቡ䴰㾱л䶒Ⲵࡔᯝԓ⸱
if($keyword === "Hello2BizUser"){ $contentStr = "⅒䗾ؑ";
} ᔰਁ᮷ẓѝ߉᰾ˈ⭘ᡧ⌘ޣਾᴽ࣑ಘ㠚ࣘਁ䘱䗷ᶕⲴᆇㅖѢѪ"Hello2BizUser"ˈᡁԜቡ ⅑ᶕࡔᯝҶ ⌘˖ؑ⁑ᶯѝ↔亩<FuncFlag>1</FuncFlag>Ⲵ٬㾱䇮Ѫ1ˈ䘉ṧ⭘ᡧᗞؑѝՊᱮ皮ᴹ ᯠ⎸Ⲵḷᘇ
$token = TOKEN; $tmpArr = array($token, $timestamp, $nonce); sort($tmpArr); $tmpStr = implode( $tmpArr ); $tmpStr = sha1( $tmpStr );
if( $tmpStr == $signature ){
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$fromUsername = $postObj->FromUserName; $toUsername = $postObj->ToUserName; $keyword = trim($postObj->Content); $time = time(); $textTpl = "<xml>
ਾ࣐ԆѪᗞؑྭ৻ˈᗞؑՊ㠚ࣘഎ༽ˈ䈧䗃ޕᵪਧ⸱ˈᛘഎ༽㔉ᆳᵪਧ⸱ ᆳ㠚ࣘሶਁ䘱аᶑᇶ⸱傼䇱⸝ؑ㔉ᛘˈᛘഎ༽傼䇱⸝ؑਾˈᛘሶ㠚ࣘᡀѪᒯᐎ 、ؑⲴሺ䍥VIPՊઈˈӛਇԆԜⲴᡰᴹӗ૱9ᣈՈᜐDŽᒯᐎ、ؑˈቡᱟ 䈕ᗞؑՊઈᒣਠⲴᇈᯩᦸᵳԓ⨶ˈᡁ৫䗷ԆԜ␈ᇍᓇ䬪ൠ൰ ˈ䈕ᗞؑՊઈᒣਠ࣏㜭䎵ᕪ˖ᵜᗞؑᒣਠ䘲ਸᴽ࣑㹼ъ ⲴՊઈ䘎䬱䖟ԦDŽާᴹ㔉Պઈਁ⸝࣏ؑ㜭ˈ㜭䘎䬱DŽՊઈ䘌〻൘ᇦҏ㜭㇑⨶ᛘⲴ ᓇ䬪ᛵߥˈՊઈҏਟԕ䙊䗷Ც㜭ᵪ㓸ㄟᡆ㘵ᗞؑˈḕⴻ㠚ᐡⲴՊઈ〟࠶ᛵߥˈ ۘ٬ᛵߥˈ䘈ਟԕḕⴻᓇ䬪ᢃᣈؑˈ୶૱ؑˈ׳䬰ؑㅹˈ䘈㜭䘌〻лঅDŽ л䶒ᱟ䖟Ԧᒣਠⲫ䱶ൠ൰৺փ傼䍖ਧ˄৫ⴻⴻᱟྲօᡀѪԆԜⲴՊઈⲴˈㄏ ❦㜭㠚࣐ࣘޕᡀѪᗞؑՊઈʽʽʽཚ血ཷҶ˅˖
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)){
z ⌘ᡀѪᔰਁ㘵
⌘ޜՇ䍖ਧˈ䴰㾱ⲫ䇠㠚ᐡⲴⵏᇎ䓛ԭؑ ⌘˖䇮㖞ޜՇਧؑᰦаᇊ㾱䉘ˈ‘ޜՇਧ〠ÿо‘ᗞؑਧÿປ߉ਾᱟн㜭؞᭩Ⲵˈ 䴰һݸ䇔ⵏᜣྭ ⌘ᆼᡀਾˈ䘋ޕ㌫㔏ˈ䘹ᤙሬ㡚кⲴþ儈㓗࣏㜭’
ަѝᴹєњ⁑ᔿ˖þ㕆䗁⁑ᔿÿоþᔰਁ⁑ᔿ’ 唈䇔ᔰⲴѪþ㕆䗁⁑ᔿ’
䘋ޕþ㕆䗁⁑ᔿÿˈ⛩ࠫਣк䀂Ⲵþޣ䰝ÿ䬮᧕ 䘋ޕþᔰਁ⁑ᔿÿˈ⛩ࠫਣк䀂Ⲵþᔰÿ᤹䫞 ᔰਾਟԕⴻࡠ˖
ҼǃᗞؑՊઈᴹӰѸՈ࣯˛ ᤃኅᯠᇒᡧ˖ᆹ㻵ᗞؑᇒᡧㄟⲴ⎸䍩㘵ᐢᴹ 3 ӯѻཊ(ⴞࡽ䘈൘໎䮯ˈᒣ൷⇿ཙᯠ໎ 100 з⭘ᡧ)ˈབྷ 䟿⎸䍩㘵ਟԕ䙊䗷ᢛ᧿Ҽ㔤⸱Ⲵᯩᔿˈ䗵䙏ᑞᤃኅՊઈ䟿˗ 㔤㌫㘱ᇒᡧ˖ሶՐ㔏Պઈ˄⻱ˈᝏᓄˈᶑ⸱ㅹ˅䐏ᗞؑ㔁ᇊˈࠪ䰘н⭘ᩪᑖˈᯩ、ׯᢰˈ 䟺᭮亮ᇒⲴ䫡व˗ Պઈӂࣘ˖Պઈਟԕ䙊䗷ᗞؑㄟˈḕ䈒Պઈ〟࠶ˈ։仍ˈ⎸䍩䇠ᖅˈ䘈ਟԕᇎ⧠ᴽ࣑亴ᇊˈӗ૱䇒 䍝࣏㜭ˈ㔉ᛘᑖᶕ䇒অ˗ ׳䬰㗔ਁ˖䙊䗷ᗞؑᒣਠˈ䘈ਟԕݽ䍩㔉ᗞؑ⭘ᡧਁ䘱Ոᜐؑˈྲ᮷ᆇˈമ⡷ˈ༠丣ˈ㿶仁ㅹˈሶᛘⲴ ᒯݽ䍩ਁ㔉亮ᇒDŽ -----------------------------------------------------ԕлᱟᔰਁ㘵สᮉ〻-------------------------------------------------------
z ᗞؑӔӂ皮ֻ
ڊањㆰঅⲴ皮ֻ˖⭘ᡧਁ䘱ӰѸ᮷ᆇˈᡁԜቡഎ༽ӰѸ᮷ᆇ ⌘˖༽ࡦԓ⸱ਾ㾱ᢺ TOKEN ٬؞᭩Ѫ㠚ᐡⲴ <?php /**
* wechat php test */
//define your token define("TOKEN", "xxx");
$str = ''; $wechatObj = new wechatCallbackapiTest(); $wechatObj->valid();
3˅ ປ߉ URL TOKEN ؑ
എࡠޜՇᒣਠ亥䶒ˈᢺ URL TOKEN ؑປ߉ਾᨀӔˈ䴰㾱؍䇱 URL окՐⲴ php ᮷Ԧൠ ൰а㠤ˈᒦф TOKEN ٬о php ѝᇊѹⲴа㠤 ؑປ߉↓⺞ਾᨀӔˈ↓ᑨՊᨀ皮ᆼᡀؑ
㠣↔ˈᐢ㓿↓ᔿᡀѪҶᔰਁ㘵ˈ᧕лᶕቡਟԕᆹ㻵㠚ᐡⲴᙍ䐟ᔰਁ〻ᒿҶ
ᗞؑޜՇᒣਠ᧕ਓᔰਁᮉ〻
൘ᵜ᮷Ⲵ㔃ቮ㔉བྷᇦӻ㓽ањ࡙⭘ᗞؑޜՇᒣਠ᧕ਓᔰਁⲴᗞؑՊઈ㇑⨶䖟Ԧᒣਠ аǃӰѸᱟᗞؑՊઈ˛
ᡰ䉃ᗞؑՊઈˈᱟՊઈ㇑⨶䖟Ԧሶ୶ᇦਁ㹼ⲴՐ㔏Պઈˈ㓿䗷⭥ᆀॆ䖜ᦒਾˈᆈۘ൘ᗞؑѝDŽ Պઈᢃᔰᵪᗞؑˈᢛ᧿୶ᇦⲴᗞؑҼ㔤⸱˄ᡆ࣐ᗞؑޜՇᑀਧѪྭ৻˅ˈቡ㜭㧧ᗇаᕐ⭥ᆀՊઈ ˈᒦᆈۘҾᗞؑѝˈণਟ䙊䗷ࡧᗞؑˈӛਇ୶ᇦᨀⲴՊઈᣈᢓ઼ՈᜐDŽ
⛩ࠫþᡀѪᔰਁ㘵’
z URLǃTOKEN 䇔䇱
ᡀѪᔰਁ㘵Ⲵㅜа↕ቡᱟປ߉ URLǃTOKEN ؑˈᶕሩᴽ࣑ಘ䘋㹼傼䇱
1˅ ᢺл䶒ԓ⸱༽ࡦᒦ؍ᆈѪањ php ᮷Ԧ˄ྲ weixin.php˅
<?php /**
* wechat php test */
//define your token define("TOKEN", "weixin"); $wechatObj = new wechatCallbackapiTest(); $wechatObj->valid();
z ᗞؑՊઈ㇑⨶㌫㔏˄࡙⭘ᗞؑᔰਁᴰᡀ࣏Ⲵ୶ъབྷ⢋˅
л䶒㔉བྷᇦӻ㓽ањᗞؑޜՇᒣਠᔰਁᴰᡀ࣏Ⲵ“བྷ⢋血”—--␡ൣа᱃ޜਨ
ⲴᗞؑՊઈ㇑⨶㌫㔏ˈ䇙Ӫ㙣ⴞаᯠˈⴞࡽᱟᡁⴻࡠᗞؑޜՇᒣਠ࡙⭘ᴰᡀ࣏Ⲵ 䖟ԦҶDŽл䶒㔉བྷᇦӻ㓽алԆⲴ࣏㜭DŽ䇙བྷᇦԕਾڊᔰਁⲴᰦى㜭ᴹњᖸྭⲴ ᙍ䐟DŽ
⭘ᵪᗞؑᐖ䗩ⲴҼ㔤⸱䇶 ࡛ḷ䇶DŽ ˄䈕ḷ䇶ᱟᒯᐎ、ؑ Ⲵᗞؑ ޜՇ䍖ਧ˅
<ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[%s]]></MsgType> <Content><![CDATA[%s]]></Content> <FuncFlag>1</FuncFlag> </xml>"; if(!empty( $keyword )) { $msgType = "text"; $contentStr = $keyword; $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); echo $resultStr; }else{ echo "Input something..."; }
<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 = "Welcome to wechat world!"; $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); echo $resultStr; }else{ echo "Input something..."; }