微信公众平台的API开发
- 格式:docx
- 大小:37.82 KB
- 文档页数:5
微信接口开发公众号开发经验分享——接口开发案例代码微信媒体图片下载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字段均为小写。
微信公众平台接口开发指南注册成为开发者注册公众账号,需要登记自己的真实身份信息注意:设置公众号信息时一定要谨慎,‘公众号名称’与‘微信号’填写后是不能修改的,需事先认真想好注册完成后,进入系统,选择导航上的‘高级功能’其中有两个模式:‘编辑模式’与‘开发模式’默认开启的为‘编辑模式’进入‘编辑模式’,点击右上角的‘关闭’链接进入‘开发模式’,点击右上角的‘开启’按钮开启后可以看到:点击‘成为开发者’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,这样用户微信中才会显示有新消息的标志此文档总结了微信公众平台开发的起步过程,接下来就需要大家发挥自己创造力了,祝大家开发出更多更有益的应用。
微信公众号开发基本接⼝1,接⼝配置填写服务器对接微信通知的接⼝地址及鉴权token配置⽹页授权获取⽤户信息域名(⽤于⽹站获取⽤户基本信息)2,服务器端实现a,修改library/Curl.php扩展⽀持postjson格式数据public function postjson($params = array(), $options = array()){// If its an array (instead of a query string) then format it correctlyif (is_array($params)){$params = json_encode($params, JSON_UNESCAPED_UNICODE);}// Add in the specific options provided$this->options($options);$this->http_method('post');$this->option(CURLOPT_POST, TRUE);$this->option(CURLOPT_POSTFIELDS, $params);$this->option(CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Content-Length: '.strlen($params)));}b,ci基本接⼝实现<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');class Weixin extends CI_Controller {var$_wxappid = "wxappid";var$_wxappsecret = "wxappsecret";var$_cachekey = "wx_access_token";var$_cacheticket = "wx_ticket";function __construct(){parent::__construct();$this->load->model('weixin_model', 'weixin');//alias name}//获取AccessToken,有调⽤次数限制,存在Redis缓存private function getAccessToken(){$token = $this->redis->get($this->_cachekey);if(is_null($token)){$result = $this->curl->simple_get("https:///cgi-bin/token?grant_type=client_credential&appid=".$this->_wxappid."&secret=".$this->_wxappsecret);$result = json_decode($result);if(array_key_exists("access_token", $result)){$token = $result->access_token;$expire = $result->expires_in;}if(!is_null($token)){$this->redis->setex($this->_cachekey, $expire - 1800, $token);}}return$token;}//获取Ticket⽤于⽣成QRCodeprivate function getTicket($uid, $token){$ticket = $this->redis->get($this->_cacheticket);if(is_null($ticket)){$param = array("expire_seconds"=>3600*4,"action_name"=>"QR_SCENE","action_info"=>array("scene" => array("scene_id"=>$uid),),);$result = $this->curl->simple_postjson("https:///cgi-bin/qrcode/create?access_token=".$token, $param);$result = json_decode($result);if(array_key_exists("ticket", $result)){$ticket = $result->ticket;$expire = $result->expire_seconds;}if(!is_null($ticket)){$this->redis->setex($this->_cacheticket, $expire - 1800, $ticket);}}return$ticket;}public function getQRCode(){$mac = $this->input->post("mac");$extradata = 1234567;$token = $this->getAccessToken();$ticket = $this->getTicket($extradata, $token);$url = "https:///cgi-bin/showqrcode?ticket=".urlencode($ticket);$data = array("code"=>0, "url"=>$url);echo$data;}//处理消息private function handleMessage($postObj, $answer = "thank you for your message"){$fromUsername = $postObj->FromUserName;$toUsername = $postObj->ToUserName;$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>";$msgType = "text";$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $answer);return$resultStr;}//处理⽤户事件private function handleEvent($postObj){$fromUsername = $postObj->FromUserName;$toUsername = $postObj->ToUserName;$keyword = trim($postObj->Content);$event = $postObj->Event;//扫描⼆维码并关注if($event == "subscribe"){$eventkey = $postObj->EventKey;$extradata = str_replace("qrscene_","",$eventkey);$res = $this->weixin->subscribe($extradata, $fromUsername);if($res){return$this->handleMessage($postObj, "subscribe success");}}//取消关注公众号else if($event == "unsubscribe"){$res = $this->weixin->unsubscribe($fromUsername);if($res){return$this->handleMessage($postObj, "unsubscribe success");}}//已关注⽤户扫描else if($event == "SCAN"){$eventkey = $postObj->EventKey;$extradata = $eventkey;$res = $this->weixin->subscribe($extradata, $fromUsername);if($res){return$this->handleMessage($postObj, "subscribe success");}}return null;}//分发消息private function dispatch(){$postStr = file_get_contents("php://input");log_message("info", $postStr);if (!empty($postStr)){libxml_disable_entity_loader(true);$postObj = simplexml_load_string($postStr);if($postObj->MsgType == "text"){$keyword = trim($postObj->Content);if(is_null($keyword) or $keyword == ""){return;}$resp = $this->handleMessage($postObj);}else{$resp = $this->handleEvent($postObj);}}log_message("info", $resp);echo$resp;}//检查签名private function check(){$signature = $this->input->get("signature");$timestamp = $this->input->get("timestamp");$nonce = $this->input->get("nonce");$token = "weixin";$tmpArr = array($token, $timestamp, $nonce);sort($tmpArr, SORT_STRING);$tmpStr = implode( $tmpArr );$tmpStr = sha1( $tmpStr );if( $tmpStr == $signature ){return true;}return false;}public function process(){if(self::check()){$echostr = $this->input->get("echostr");if($echostr){echo$echostr;}else{self::dispatch();}}else{echo "error";}}private function OpenIdPage(){$result = $this->curl->simple_get("https:///sns/oauth2/access_token?appid=".$this->_wxappid."&secret=".$this->_wxappsecret."&code=".$code."&grant_type=authorization_code");$result = json_decode($result);return$rid;}public function UserInfoPage(){$result = $this->getUserToken();$token = $result->access_token;$openid = $result->openid;$result = $this->curl->simple_get("https:///sns/userinfo?access_token=$token&openid=$openid&lang=zh_CN");$result = json_decode($result);var_dump($result);}//⽣成⾃定义菜单,微信客户端隔天刷新,可取消关注再关注实现⽴即刷新public function genmenu(){$cpage = "https:///connect/oauth2/authorize?appid=".$this->_wxappid."&redirect_uri=".urlencode("/weixin/OpenIdPage")."&response_type=code&scope=snsapi_base&state=12345#wechat_redirect"$ppage = "https:///connect/oauth2/authorize?appid=".$this->_wxappid."&redirect_uri=".urlencode("/weixin/UserInfoPage")."&response_type=code&scope=snsapi_userinfo&state=12345#wechat_redirect"$token = $this->getAccessToken();$param = array("button" => array(array("type"=>"view","name"=>"不需要授权的页⾯","url"=>$cpage),array("type"=>"view","name"=>"需要授权的页⾯","url"=>$cpage)));$result = $this->curl->simple_postjson("https:///cgi-bin/menu/create?access_token=".$token, $param);var_dump($result);}}/* End of file weixin.php *//* Location: ./application/controllers/weixin.php */c,素材管理等接⼝上传curl -F media=@1.jpg -F type=image -v "https:///cgi-bin/material/add_material?access_token=TVaBtXR8CJH3dd_dNaPae45a-aU2T1CpW2KsxUNjOlvpKWZ01QT-9BH1Jp_eumniu7ojpFUmRXn8oNgpQxNvgeYsv09QllK9gPvouV {"media_id":"im03apKihxUcy45i1Cu30E2WFdPONd_8yyG7VwE7as0","url":"https:\/\/\/mmbiz\/vyiaPGicTjvibZHtrldAfEahzD0RdQVS9iaXA90Y0uibu1kTOUSO7cu7CbsHlJicrHXubvnHrTmolibK8amJzQIPLAkGg\/0?wx_fmt=jpeg"查看https:///cgi-bin/material/batchget_material?access_token=...统计数量https:///cgi-bin/material/get_materialcount?access_token=TVaBtXR8CJH3dd_dNaPae45a-aU2T1CpW2KsxUNjOlvpKWZ01QT-9BH1Jp_eumniu7ojpFUmRXn8oNgpQxNvgeYsv09QllK9gPvouVISUoo{"voice_count":0,"video_count":0,"image_count":3,"news_count":0}。
微信公众平台发送模板消息(Java接⼝开发)前⾔:最近⼀直再弄微信扫码推送图⽂消息和模板消息发送,感觉学习到了不少东西。
今天先总结⼀下微信公众平台模板消息的发送。
因为这个⾃⼰弄了很久,开始很多地⽅不明⽩,所以今天好好总结⼀下。
微信公众平台技术⽂档:⼀、概述模板消息仅⽤于公众号向⽤户发送重要的服务通知,只能⽤于符合其要求的服务场景中,如信⽤卡刷卡通知,商品购买成功通知等。
不⽀持⼴告等营销类消息以及其它所有可能对⽤户造成骚扰的消息。
关于使⽤规则,请注意:1、所有服务号都可以在功能->添加功能插件处看到申请模板消息功能的⼊⼝,但只有认证后的服务号才可以申请模板消息的使⽤权限并获得该权限;2、需要选择公众账号服务所处的2个⾏业,每⽉可更改1次所选⾏业;3、在所选择⾏业的模板库中选⽤已有的模板进⾏调⽤;4、每个账号可以同时使⽤25个模板。
5、当前每个账号的模板消息的⽇调⽤上限为10万次,单个模板没有特殊限制。
【2014年11⽉18⽇将接⼝调⽤频率从默认的⽇1万次提升为⽇10万次,可在MP登录后的开发者中⼼查看】。
当账号粉丝数超过10W/100W/1000W时,模板消息的⽇调⽤上限会相应提升,以公众号MP后台开发者中⼼页⾯中标明的数字为准。
关于接⼝⽂档,请注意:1、模板消息调⽤时主要需要模板ID和模板中各参数的赋值内容;2、模板中参数内容必须以”.DATA”结尾,否则视为保留字;3、模板保留符号”{{ }}”。
看微信公众平台接⼝⽂档最开始我的内⼼是崩溃的,因为⽬录列表⼀开始就是设置所属⾏业,获取所属⾏业信息等。
后来整理思路,我们主要负责的功能的实现,就不去考虑那么多其他的内容,直接弄模板消息的发送。
但是发送模板之前有⼀个很重要的步骤,就是模板ID(template_id)。
微信公众平台发送模板消息有严格的要求,参考。
⼆、模板消息的设计这⾥是依靠微信公众平台测试公众号的模板消息接⼝来设计消息模板,通过⾏业类型来获取模板的同学还是参考微信公众平台的官⽅⽂档来学习。
微信公众平台开发者文档1 新手接入 (1)1,1 接入指南 (1)1.2 开发者规范 (2)2 基础支持 (3)2.1 获取access_token (3)2.2 全局返回码说明 (4)2.3 接口频率限制说明 (7)2.4 上传下载多媒体文件 (9)1 新手接入1,1 接入指南第一步:申请消息接口在公众平台网站的高级功能–开发模式页,点击“成为开发者”按钮,填写URL和Token,其中URL是开发者用来接收微信服务器数据的接口URL。
Token可由开发者任意填写,用作生成签名(该Token会和接口URL中包含的Token进行比对,从而验证安全性)。
第二步:验证URL有效性开发者提交信息后,微信服务器将发送GET请求到填写的URL上,GET请求携带四个参数:开发者通过检验signature对请求进行校验(下面有校验方式)。
若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。
检验signature的PHP示例代码:第三步:成为开发者验证URL有效性成功后即接入生效,成为开发者。
如果公众号类型为服务号(订阅号只能使用普通消息接口),可以在公众平台网站中申请认证,认证成功的服务号将获得众多接口权限,以满足开发者需求。
此后用户每次向公众号发送消息、或者产生自定义菜单点击事件时,响应URL将得到推送。
公众号调用各接口时,一般会获得正确的结果,具体结果可见对应接口的说明。
返回错误时,可根据返回码来查询错误原因。
全局返回码说明用户向公众号发送消息时,公众号方收到的消息发送者是一个OpenID,是使用用户微信号加密后的结果,每个用户对每个公众号有一个唯一的OpenID。
此外请注意,微信公众号接口只支持80接口。
1.2 开发者规范开发者进行公众号开发时,除了需要满足每个接口的规范限制、调用频率限制外,还需特别注意模版消息、用户数据等敏感信息的使用规范。
涉及用户数据时:∙您的服务需要收集用户任何数据的,必须事先获得用户的明确同意,且仅应当收集为运营及功能实现目的而必要的用户数据,同时应当告知用户相关数据收集的目的、范围及使用方式等,保障用户知情权。
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`。
获取jsapi token
在使用微信公众平台开发时,我们经常需要使用JS-SDK提供的一些功能,如获取用户的位置信息、录音、拍照等。
而要使用JS-SDK,首先需要获取jsapi token。
获取jsapi token的步骤如下:
1. 登录微信公众平台,进入“开发者中心”页面。
2. 点击左侧菜单栏的“开发设置”,然后点击“公众号开发信息”中的“开发者ID”。
3. 在“基本配置”页面中,找到“开发者模式”部分,点击“设置”按钮。
4. 在“JS接口安全域名”中填写你的网站域名,点击“提交”按钮。
5. 在“公众号开发信息”页面中,找到“接口权限”部分,点击“获取access_token”按钮。
6. 在弹出的对话框中,填写你的公众号AppID和AppSecret,点击“确定”按钮。
7. 授权后,系统会返回一个access_token和expires_in(有效期),使用access_token可以调用JS-SDK提供的功能。
8. 如果access_token已过期,需要重新获取。
重新获取的步骤同上。
注:由于获取的access_token有一定的安全性,建议不要在前端直接获取,而是通过后台进行获取。
微信公众平台二次开发关键技术随着移动互联网的快速发展,公众平台作为一个社交媒体营销的重要工具,已经成为了众多企业和个人进行品牌推广和营销的重要渠道。
而公众平台的二次开发,则是让这个平台更加符合企业或个人需求的关键技术。
一、公众平台二次开发的重要性公众平台提供了一系列的基础功能,包括消息推送、用户管理、自定义菜单等。
然而,这些基础功能往往不能满足企业或个人的个性化需求。
因此,二次开发就成为了必要的选择。
通过二次开发,我们可以扩展公众平台的功能,提高用户体验,实现更高效的营销效果。
二、公众平台二次开发关键技术1、API接口开发API接口是公众平台二次开发的基础。
API接口开发包括获取用户信息、发送消息、自定义菜单等功能的开发。
在实际开发中,需要仔细阅读官方文档,理解每个API接口的功能和参数,并根据需求进行相应的开发。
2、数据库设计公众平台的用户数据和消息数据都需要存储在数据库中。
因此,数据库设计是二次开发的重要环节。
在设计数据库时,需要考虑数据的结构、关系和索引等,以保证数据的准确性和查询效率。
3、接口测试与调试在完成API接口开发和数据库设计后,需要进行接口测试和调试。
测试主要包括功能测试、性能测试和安全测试等。
在测试过程中,需要使用合适的测试工具和技术,以保证测试的准确性和有效性。
4、安全性保障公众平台的用户数据和消息数据涉及隐私和安全问题。
因此,在二次开发过程中,需要采取一系列的安全性保障措施。
例如,使用HTTPS 协议进行数据传输、对用户密码进行加密存储、限制异常操作等。
三、总结公众平台的二次开发是一项复杂而重要的工作。
在开发过程中,需要掌握API接口开发、数据库设计、接口测试与调试和安全性保障等关键技术。
还需要根据企业或个人的实际需求进行定制化开发,以提高用户体验和营销效果。
为了更好地完成公众平台的二次开发工作,我们需要不断学习和探索新的技术和方法。
微信公众平台二次开发详解及案例随着的普及和公众平台的崛起,越来越多的企业和个人开始利用这个平台进行二次开发,以实现更丰富的功能和定制化的服务。
微信公众平台开发(4)微信模板消息接⼝⼀、添加消息模板1、所有服务号都可以在功能->添加功能插件处看到申请模板消息功能的⼊⼝,但只有认证后的服务号才可以申请模板消息的使⽤权限并获得该权限;2、需要选择公众账号服务所处的2个⾏业3、在所选择⾏业的模板库中添加模板;4、在我的模板中可以看到添加的模板(商家新订单提醒模板)⼆、模板消息接⼝开发access_token是公众号的全局唯⼀票据,公众号调⽤各接⼝时都需使⽤access_token,access_token的有效期是2⼩时。
模板消息需要使⽤access_token来授权。
1、获取access_token接⼝地址:https:///cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET请求⽅式:GET返回的数据格式:json格式1public String getAccessToken(){2 String requestUrl = "https:///cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";34 String appid = "appid";//第三⽅⽤户唯⼀凭证56 String secret = "appsecret";// 第三⽅⽤户唯⼀凭证密钥,即appsecret78 requestUrl=requestUrl.replace("APPID", appid);9 requestUrl=requestUrl.replace("APPSECRET", secret);1011 JSONObject jsonObject= CommonUtil.httpsRequestToJsonObject(requestUrl, "GET", null, false);1213 String access_token = jsonObject.getString("access_token");1415return access_token;1617 }2、模板1public class Template {23// 消息接收⽅4private String toUser;5// 模板id6private String templateId;7// 模板消息详情链接8private String url;9// 消息顶部的颜⾊10private String topColor;11// 参数列表12private List<TemplateParam> templateParamList;13//省略getter、setter⽅法1415//按微信接⼝要求格式化模板16public String toJSON() {17 StringBuffer buffer = new StringBuffer();18 buffer.append("{");19 buffer.append(String.format("\"touser\":\"%s\"", this.toUser)).append(",");20 buffer.append(String.format("\"template_id\":\"%s\"", this.templateId)).append(",");21 buffer.append(String.format("\"url\":\"%s\"", this.url)).append(",");22 buffer.append(String.format("\"topcolor\":\"%s\"", this.topColor)).append(",");23 buffer.append("\"data\":{");24 TemplateParam param = null;25for (int i = 0; i < this.templateParamList.size(); i++) {26 param = templateParamList.get(i);27// 判断是否追加逗号28if (i < this.templateParamList.size() - 1){2930 buffer.append(String.format("\"%s\": {\"value\":\"%s\",\"color\":\"%s\"},", param.getName(), param.getValue(), param.getColor()));31 }else{32 buffer.append(String.format("\"%s\": {\"value\":\"%s\",\"color\":\"%s\"}", param.getName(), param.getValue(), param.getColor()));33 }3435 }36 buffer.append("}");37 buffer.append("}");38return buffer.toString();39 }40 }3、发送模板消息,返回json格式结果public JSONObject sendTemplateMsg(Template template){//获取tokenString token = accessTokenService.getAccessToken();String requestUrl = "https:///cgi-bin/template/api_add_template?access_token=ACCESS_TOKEN";requestUrl=requestUrl.replace("ACCESS_TOKEN", token);if (log.isDebugEnabled()) {log.debug(template.toJSON());}//发送模板消息,返回json格式结果JSONObject jsonObject = CommonUtil.httpsRequestToJsonObject(requestUrl, "POST", template.toJSON(),false);return jsonObject;}三、实现效果以订单⽀付成功通知为例:构造消息实体:1 String tplId = "whmJQfErBz_62Fu4ebCiDkz4u9hgBJOMolbLEwZDvh4";2 Template tem=new Template();3 tem.setTemplateId(tplId);4 tem.setTopColor(SUCCESS_TOP_COLOR);56 List<TemplateParam> paras=new ArrayList<TemplateParam>();7 paras.add(new TemplateParam("first","您有⼀笔新订单,等待发货。
微信公众平台技术方案java公众平台技术方案(Java版)随着的普及和广泛使用,公众平台成为了企业、个人和组织与用户进行互动和信息传播的重要渠道。
为了满足广大用户的需求,本文将介绍一种基于Java的公众平台技术方案,帮助大家快速搭建自己的公众平台。
一、技术选型1、后端技术:Java作为后端开发语言,具有稳定、安全、高效等优点,适合用于构建高并发、高性能的应用。
在Java生态圈中,Spring Boot是一个广泛使用的框架,它可以帮助我们快速搭建应用程序,减少开发成本。
2、前端技术:前端开发采用React框架,具有良好的跨平台性和可维护性。
同时,Ant Design等UI组件库可以快速搭建美观、易用的界面。
3、数据库技术:MySQL是一个成熟、稳定的开源关系型数据库,可以满足大多数应用场景的需求。
使用MySQL可以保证数据的一致性和可靠性。
4、消息队列:使用RabbitMQ作为消息队列中间件,可以保证消息的可靠传输和处理,提高系统的稳定性和可扩展性。
二、系统架构设计1、后端架构设计:后端采用微服务架构,将系统拆分为多个独立的服务,每个服务负责一部分功能。
这种架构可以提高系统的可维护性和可扩展性。
使用Spring Boot框架进行开发,每个服务都可以独立部署,方便进行弹性伸缩。
2、前端架构设计:前端采用React框架和Ant Design组件库进行开发。
使用Webpack等工具进行打包和构建,生成静态资源文件。
前端代码可以通过CDN进行分发,提高加载速度和用户体验。
3、数据库设计:数据库采用MySQL,根据业务需求设计表结构,保证数据的一致性和完整性。
使用索引优化可以提高查询效率,使用事务可以保证数据的一致性。
4、消息队列设计:使用RabbitMQ作为消息队列中间件,负责处理异步任务和消息传输。
RabbitMQ具有高可用性、可扩展性和可靠性等特点,可以保证消息的可靠传输和处理。
三、安全策略1、身份验证:使用HTTPS协议进行通信,保证数据传输的安全性。
微信公众平台的API开发
随着移动互联网的快速发展,微信成为了人们生活中不可或缺
的一部分。
作为移动社交平台中的翘楚,微信公众账号的API开
发也变得越来越重要。
本文将介绍微信公众平台的API开发相关
知识,帮助读者了解并掌握如何进行微信公众平台的API开发。
一、什么是微信公众平台的API开发是指通过微信提供的接口,实现对公众号的一系列操作。
借助这些接口,开发者可以自定义
公众号的功能,满足用户的特定需求。
通过API开发,可以实现
自动回复消息、获取用户信息、发送模板消息等功能,从而提高
公众号的运营效果。
二、微信公众平台的API类型
微信公众平台的API分为四种类型:基础接口、素材接口、用
户管理接口和数据统计接口。
1. 基础接口
基础接口包括获取access_token、获取微信服务器IP地址等功能。
access_token是调用其他接口时的必需参数,通过获取
access_token,可以保证接口调用的安全性。
2. 素材接口
素材接口包括上传临时素材、上传永久素材、获取素材列表等
功能。
开发者可以通过素材接口管理公众号的多媒体素材,如图片、视频、音频等。
3. 用户管理接口
用户管理接口包括获取用户基本信息、获取关注者列表、设置
用户备注等功能。
通过用户管理接口,开发者可以获取用户的基
本信息,如昵称、性别、地区等,以便进行个性化的运营。
4. 数据统计接口
数据统计接口包括获取用户增减数据、获取图文群发每日数据、获取图文群发总数据等功能。
开发者可以通过数据统计接口了解
公众号的运营情况,从而进行有针对性的优化和改进。
三、微信公众平台的API开发步骤
进行微信公众平台的API开发,一般需要以下步骤:
1. 注册开发者账号
在微信公众平台官网上注册开发者账号,并创建一个公众号。
注册成功后,会获得一个AppID和AppSecret,这是进行API开发的重要凭证。
2. 获取access_token
通过调用基础接口中的“获取access_token”接口,获取
access_token。
access_token的有效期为2小时,在有效期内可以多次复用。
获取access_token后,可以进行后续的接口调用。
3. 接口调用
根据开发需求,选择合适的接口进行调用。
在调用接口时,需要使用获得的access_token作为参数。
具体接口的调用方法和参数可以参考微信公众平台的开发文档。
4. 处理结果
根据接口调用的返回结果,进行相应的处理。
处理的方式有很
多种,可以根据实际需求进行业务逻辑的编写。
常见的处理方式
包括数据存储、消息回复、业务逻辑处理等。
四、开发注意事项
在进行微信公众平台的API开发时,需要注意以下几点:
1. 遵循微信官方规范
开发者在进行API开发时,需要遵循微信公众平台的开发规范。
不得利用API接口进行违法乱纪的行为,否则将可能导致账号被
封禁。
2. 合理设置接口权限
在开发过程中,需要根据实际需求合理设置接口的权限。
对于
一些敏感接口,可以设置只允许特定用户或特定IP进行调用,以
保证接口的安全性。
3. 错误处理机制
在进行接口调用时,需要考虑到各种异常情况的处理。
针对可
能出现的错误,应编写相应的错误处理机制,以保证程序的稳定
运行。
总结:
微信公众平台的API开发为公众号运营提供了强有力的支持,
通过灵活运用各种接口,开发者可以给用户提供更加个性化的服务。
在进行API开发时,开发者需要仔细了解接口的调用方法和
参数,合理利用API接口进行功能开发。
同时,开发者也要遵守
微信的相关规定,确保接口的安全性和稳定性。
相信通过学习和
实践,开发者能够在微信公众平台的API开发中取得优秀的成果。