轩宇网 - 微信开发
type: channel
link: https://xysoft.cc/tag/微信开发
items: PHP实现微信随机红包算法和微信红包的架构设计简介
items: php微信公众号开发之欢迎老朋友
items: PHP实现微信自定义分享图片，标题，描述
items: PHP微信公众号开发之微信企业付款给个人
items: PHP实现微信企业转账功能
items: php实现微信订阅号天气预报及论坛地址功能开发
items: php官方微信接口大全（微信支付、微信红包、微信摇一摇、微信小店）
items: PHP微信开发之上传临时素材
items: 详解使用php调用微信接口上传永久素材
items: THINKPHP3.2.3实现微信公众账号根据关键字进行图文推送

PHP实现微信随机红包算法和微信红包的架构设计简介
type: item
date: 2019-02-10T08:33:48+08:00
description: 1、微信的金额什么时候算？ 答：微信金额是拆的时候实时算出来，不是预先分配的，采用的是纯内存计算，不需要预算空间存储。。 采取实时计算金额的考虑：预算需要占存储，实时效率很高，预算才效率低。2、实时性：为什么明明抢到红包，点开后发现没有？ 答：2014年的红包一点开就知道金额，分两次操作，先抢到金额，然后再转账。 2015年的红包的拆和抢是分离的，需要点两次，因此会出现抢到红包了，但点开后告知红包已经被领完的状况。进入到第一个页面不代表抢到，只表示当时红包还有。3、分配：红包里的金额怎么算？为什么出现各个红包金额相差很大？ 答：随机，额度在0.01和剩余平均值*2之间。 例如：发100块钱，总共10个红包，那么平均值是10块钱一个，那么发出来的红包的额度在0.01元～20元之间波动。 当前面3个红包总共被领了40块钱时，剩下60块钱，总共7个红包，那么这7个红包的额度在：0.01～（60/7*2）=17.14之间。 注意：这里的算法是每被抢一个后，剩下的会再次执行上面的这样的算法（Tim老师也觉得上述算法太复杂，不知基于什么样的考虑）。这样算下去，会超过最开始的全部金额，因此到了最后面如果不够这么算，那么会采取如下算法：保证剩余用户能拿到最低1分钱即可。如果前面的人手气不好，那么后面的余额越多，红包额度也就越多，因此实际概率一样的。4、红包的设计 答：微信从财付通拉取金额数据郭莱，生成个数/红包类型/金额放到redis集群里，app端将红包ID的请求放入请求队列中，如果发现超过红包的个数，直接返回。根据红包的裸祭处理成功得到令牌请求，则由财付通进行一致性调用，通过像比特币一样，两边保存交易记录，交易后交给第三方服务审计，如果交易过程中出现不一致就强制回归。5、发性处理：红包如何计算被抢完？ 答：cache会抵抗无效请求，将无效的请求过滤掉，实际进入到后台的量不大。cache记录红包个数，原子操作进行个数递减，到0表示被抢光。财付通按照20万笔每秒入账准备，但实际还不到8万每秒。6、通如何保持8w每秒的写入？ 答：多主sharding，水平扩展机器。7、据容量多少？ 答：一个红包只占一条记录，有效期只有几天，因此不需要太多空间。8、询红包分配，压力大不？ 答：抢到红包的人数和红包都在一条cache记录上，没有太大的查询压力。9、一个红包一个队列？ 答：没有队列，一个红包一条数据，数据上有一个计数器字段。10、有没有从数据上证明每个红包的概率是不是均等？ 答：不是绝对均等，就是一个简单的拍脑袋算法。11、拍脑袋算法，会不会出现两个最佳？ 答：会出现金额一样的，但是手气最佳只有一个，先抢到的那个最佳。12、每领一个红包就更新数据么？ 答：每抢到一个红包，就cas更新剩余金额和红包个数。13、红包如何入库入账？ 数据库会累加已经领取的个数与金额，插入一条领取记录。入账则是后台异步操作。14、入帐出错怎么办？比如红包个数没了，但余额还有？ 答：最后会有一个take all操作。另外还有一个对账来保障。 使用PHP发红包，当我们输入红包数量和总金额后，PHP会根据这两个值进行随机分配每个金额，保证每个人都能领取到一个红包，每个红包金额不等，就是要求红包金额要有差异，所有红包金额总额应该等于总金额。首先给大家分析下规律：设定总金额为10元，有N个人随机领取：N=1 第一个则红包金额=X元；N=2 第二个为保证第二个红包可以正常发出，第一个红包金额=0.01至9.99之间的某个随机数。第二个红包=10-第一个红包金额；N=3 第三个红包1=0.01至9.99之间的某个随机数红包2=0.01至(10-红包1-0.01)的某个随机数红包3=10-红包1-红包2……于是我们得到一个规律，在分配当前红包金额时，先预留剩余红白所需最少金额，然后在0.01至总金额-预留金额间取随机数，得到的随机数就是当前红包分配的金额。实际应用中，程序先将红包金额分配好，即发红包时，红包个数以及每个红包的金额都分配好了，那么用户来抢红包时，我们随机给用户返回一个红包即可。微信红包分配算法代码： $total=19.5;//红包总金额 $num=9;// 分成10个红包，支持10人随机领取 $min=0.01;//每个人最少能收到0.01元 $money_arr=array(); //存入随机红包金额结果 for ($i=1;$i<$num;$i++) { $safe_total=($total-($num-$i)*$min)/($num-$i);//随机安全上限 $money= mt_rand($min*100,$safe_total*100)/100; $total=$total-$money; $money_arr[]= $money; echo '第'.$i.'个…

php微信公众号开发之欢迎老朋友
type: item
date: 2019-01-23T22:42:05+08:00
description: 这篇文章主要为大家详细介绍了php微信公众号开发之欢迎老朋友，具有一定的参考价值，感兴趣的小伙伴们可以参考一下本文实例为大家分享了php微信公众号开发之欢迎老朋友的具体代码，供大家参考，具体内容如下介绍数据库inserticonv 进行数据库转码函数fromusername关键代码如下：$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); $fromUsername = $postObj->FromUserName; $toUsername = $postObj->ToUserName; $keyword = trim($postObj->Content); $time = time(); $textTpl = "<xml> <ToUserName> %s </ToUserName> <FromUserName> %s </FromUserName> <CreateTime>%s</CreateTime> <MsgType> %s </MsgType> <Content> %s </Content> <FuncFlag>0</FuncFlag> </xml>"; if(!empty( $keyword )) { //用 户 名 : $user //密 码 : $pwd //主库域名 : $host //从库域名 : SAE_MYSQL_HOST_S //端 口 : $port //数据库名 : $dbname $dbname = "app_dq095"; $host = "w.rdc.sae.sina.com.cn"; $port = "3306"; $user = "4k514n103z"; $pwd = "2402314li2j1i5im1xy2xizj5y332w2x41k2z203"; /*接着调用mysql_connect()连接服务器*/ // 连主库 $db = mysql_connect($host,$user,$pwd); if(!$db){ die("Connect Server Failed: " . mysql_error($db)); } /*连接成功后立即调用mysql_select_db()选中需要连接的数据库*/ if (!mysql_select_db($dbname)) { die("Select Database Failed: " . mysql_error($db)); } mysql_query("set names utf-8",$db); /*至此连接已完全建立，就可对当前数据库进行相应的操作了*/ /*！！！注意，无法再通过本次连接调用mysql_select_db来切换到其它数据库了！！！*/ /* 需要再连接其它数据库，请再使用mysql_connect+mysql_select_db启动另一个连接*/ /** * 接下来就可以使用其它标准php mysql函数操作进行数据库操作 */ $sql="SELECT * FROM `welcome`WHERE `user`= '" . iconv("UTF-8","GBK",$fromUsername) . "'"; $query=mysql_query($sql); $rs=mysql_fetch_array($query); $b= $rs['user']; $c=iconv("GBK","UTF-8",$b); $msgType = "text"; if ($c==$fromUsername) { $contentStr = "欢迎老朋友!"; }else{ $sql="INSERT INTO `welcome`(`id`,`user`) VALUES (NULL,'{$fromUsername}')"; mysql_query($sql); $contentStr = "欢迎新朋友!"; } $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); echo $resultStr; mysql_close($db); }else{ echo "Input something..."; }完整代码如下： <?php /** * wechat php test */ //define your token define("TOKEN", "weixin"); $wechatObj = new wechatCallbackapiTest(); $wechatObj->responseMsg(); cla…

PHP实现微信自定义分享图片，标题，描述
type: item
date: 2018-11-03T11:22:35+08:00
description: PHP实现微信自定义分享图片，标题，描述weshare.php<?php // 步骤1.设置appid和appsecret $appid = 'wxabcddefjfgghg'; $appsecret = 'fdsfagewafasdf125f1d5f15e3fc'; // 步骤2.生成签名的随机串 function nonceStr($length){ $str = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';//62个字符 $strlen = 62; while($length > $strlen){ $str .= $str; $strlen += 62; } $str = str_shuffle($str); return substr($str,0,$length); } // 步骤3.获取access_token $result = http_get('https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$appid.'&secret='.$appsecret); $json = json_decode($result,true); $access_token = $json['access_token']; function http_get($url){ $oCurl = curl_init(); if(stripos($url,"https://")!==FALSE){ curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($oCurl, CURLOPT_SSLVERSION, 1); //CURL_SSLVERSION_TLSv1 } curl_setopt($oCurl, CURLOPT_URL, $url); curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1 ); $sContent = curl_exec($oCurl); $aStatus = curl_getinfo($oCurl); curl_close($oCurl); if(intval($aStatus["http_code"])==200){ return $sContent; }else{ return false; } } // 步骤4.获取ticket $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=$access_token"; $res = json_decode ( http_get ( $url ) ); $ticket = $res->ticket; function getWxConfig($appid,$jsapiTicket,$url,$timestamp,$nonceStr) { $string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr&timestamp=$timestamp&url=$url"; $signature = sha1 ( $string ); $WxConfig["appId"] = $appid; $WxConfig["nonceStr"] = $nonceStr; $WxConfig["timestamp"] = $timestamp; $WxConfig["url"] = $url; $WxConfig["signature"] = $signature; $WxConfig["rawString"] = $string; return $WxConfig; } // 步骤5.生成wx.config需要的参数 $surl = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; $ws = getWxConfig( $appid,$ticket,$surl,time(),nonceStr(16) ); ?> demo.php<?php //require .'/weshare.php';// define('ROOT_PATH', dirname(__FILE__)); //define("MUYU" , true);//全局网站标示(防止恶意访问) 然而并没有卵…

PHP微信公众号开发之微信企业付款给个人
type: item
date: 2018-10-06T15:00:00+08:00
description: 这篇文章主要为大家详细介绍了php微信公众号开发之微信企业付款给个人，具有一定的参考价值，感兴趣的小伙伴们可以参考一下本文实例为大家分享了php微信企业付款给个人的具体代码，供大家参考，具体内容如下以下有关微信支付中企业付款的介绍及编码参考自微信支付开发文档，如图所示<?php /* <!--微信企业付款给个人--!> 具体细节参考微信支付开发文档 参数 $openid个人openid $re_user_name个人真实姓名 $amount付款金额 $partner_trade_no商户订单号 $desc描述 如果付款成功，返回true,否则返回false */ private function weixin_transfer_money($openid,$re_user_name,$amount,$partner_trade_no,$desc){ //请求参数 //公众号appid（字段名）--mch_appid(变量名)--1(必填) //输入你的公众号appid $data['mch_appid']="**************"; //商户号--mchid--1 //输入你的商户号 $data['mchid']="*************"; //设备号--device_info--0 //随机字符串--nonce_str--1 $data['nonce_str']=$this->get_unique_value(); //签名--sign--1 $data['sign']=""; //商户订单号--partner_trade_no--1 $data['partner_trade_no']=$partner_trade_no; //用户openid--openid--1 $data['openid']=$openid; //校验用户姓名选项--check_name--1 $data['check_name']="OPTION_CHECK"; //收款用户姓名--re_user_name--0 $data['re_user_name']=$re_user_name; //金额--amount--1 $data['amount']=$amount; //企业付款描述信息--desc--1 $data['desc']=$desc; //IP地址--spbill_create_ip--1 $data['spbill_create_ip']=$_SERVER['LOCAL_ADDR']; //生成签名 //对数据数组进行处理 //API密钥，输入你的appsecret $appsecret="*************"; $data=array_filter($data); ksort($data); $str=""; foreach($data as $k=>$v){ $str.=$k."=".$v."&"; } $str.="key=".$appsecret; $data['sign']=strtoupper(MD5($str)); /* 付款操作： 1.将请求数据转换成xml 2.发送请求 3.将请求结果转换为数组 4.将请求信息和请求结果录入到数据库中 5.判断是否通信成功 6.判断是否付款成功 */ //企业付款接口地址 $url="https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers"; //1.将请求数据由数组转换成xml $xml=$this->arraytoxml($data); //2.进行请求操作 $res=$this->curl($xml,$url); //3.将请求结果由xml转换成数组 $arr=$this->xmltoarray($res); //4.将请求信息和请求结果录入到数据库中，可以根据自己的需要进行处理，$arr是返回的结果数组 $transfer['partner_trade_no']=$data['partner_trade_no']; $transfer['request_data']=serialize($data); $transfer['response_data']=serialize($arr); if($arr['return_code']=="SUCCESS" && $arr['result_code']=="SUCCESS"){ //5. 判断是否通讯成功 6.判断是否付款成功 $transfer['success']=1; $transfer_res['success']=1; }else{ $transfer['success']=0; $transfer_res['succe…

PHP实现微信企业转账功能
type: item
date: 2018-10-04T10:43:51+08:00
description: 这篇文章主要为大家详细介绍了php实现微信企业转账功能，具有一定的参考价值，感兴趣的小伙伴们可以参考一下本文实例为大家分享了php实现微信企业转账的具体代码，供大家参考，具体内容如下：WxTransfers.Config.php<?php /** * 配置账号信息 * 配置要和证书在一起！！！！ */ class WxTransfersConfig { //=======【基本信息设置】============== // /** * TODO: 修改这里配置为您自己申请的商户信息 * 微信公众号信息配置 * * APPID：绑定支付的APPID（必须配置，开户邮件中可查看） * * MCHID：商户号（必须配置，开户邮件中可查看） * * KEY：商户支付密钥，参考开户邮件设置（必须配置，登录商户平台自行设置） * 设置地址：https://pay.weixin.qq.com/index.php/account/api_cert * */ const APPID = ''; const MCHID = ''; const KEY = ''; //=======【证书路径设置】===================================== /** * TODO：设置商户证书路径 * 证书路径,注意应该填写绝对路径,发送红包和查询需要，可登录商户平台下载 * API证书下载地址：https://pay.weixin.qq.com/index.php/account/api_cert，下载之前需要安装商户操作证书） * @var path 跟这个文件同一目录下的cert文件夹放置证书！！！！ */ const SSLCRET12 = 'cert/apiclient_cert.p12'; const SSLCERT_PATH = 'cert/apiclient_cert.pem'; const SSLKEY_PATH = 'cert/apiclient_key.pem'; const SSLROOTCA = 'cert/rootca.pem'; //=======【证书路径设置】===================================== /** * 获取文件的路径，证书需要完整路径 * @return string */ public static function getRealPath(){ return __DIR__.'/'; } } WxTransfers.Api.php<?php require_once "WxTransfers.Config.php"; /** * 微信企业转账工具类 */ class WxTransfers { // 企业转账请求地址 const TRANSFERS_URL = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers'; //获取转账信息地址 const GETINFO_URL='https://api.mch.weixin.qq.com/mmpaymkttransfers/gettransferinfo'; // 转账需要的配置 'wxappid','mch_id','key' private $_keys; // 转账需要的证书文件 'api_cert', 'api_key', 'rootca',请传入绝对路径！！！ private $_cert; protected $log_file; public $error; // 相关配置必备参数 protected $_parameters = array(); // 最后一次生产的订单号 protected $_lastPartnerTradeNo; // 记录最后一次发送请求的结果对象 protected $_lastResult; // 最后一次随机数 protected $_lastRandNum; public function __construct($config) { $keys = array( 'wxappid', 'mch_id', 'key' ); $files = array( 'api_cert', 'api_key', 'rootca' ); foreach ($keys as $key) { try { $this->_keys[$key] = $config[$key]; } catch (Exception $e) { throw new Exception('参数缺失：' . $key); } } foreach ($files as $file) { try { $cret_file =…

php实现微信订阅号天气预报及论坛地址功能开发
type: item
date: 2018-08-13T21:23:32+08:00
description: 使用PHP实现微信订阅号天气预报及论坛地址功能开发index.php代码<?php /* 轩宇工作室 CopyRight 2014 All Rights Reserved */ //定义TOKEN define("TOKEN", "weixin"); $wechatObj = new wechatCallbackapiTest(); if (!isset($_GET['echostr'])) { $wechatObj->responseMsg(); }else{ $wechatObj->valid(); } class wechatCallbackapiTest { //验证签名 public function valid() { $echoStr = $_GET["echostr"]; $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){ echo $echoStr; exit; } } public function responseMsg() { $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; if (!empty($postStr)){ $this->logger("R ".$postStr); $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); $RX_TYPE = trim($postObj->MsgType); $result = ""; switch ($RX_TYPE) { case "event": $result = $this->receiveEvent($postObj); break; case "text": $result = $this->receiveText($postObj); break; } $this->logger("T ".$result); echo $result; }else { echo ""; exit; } } private function receiveEvent($object) { switch ($object->Event) { case "subscribe": $content = "欢迎关注鸟击知识平台 "; break; } $result = $this->transmitText($object, $content); return $result; } private function receiveText($object) { $keyword = trim($object->Content); //判断天气 if (strstr($keyword, "天气")){ $city = str_replace('天气', '', $keyword); include("weather.php"); $content = getWeatherInfo($city); //判断论坛，输入论坛直接发送图文消息并跳转到相应的链接地址 }else if (strstr($keyword, "论坛")){ $content[] = array("Title" =>"我们的论坛","Description" =>"", "PicUrl" =>"http://www.henkuai.com/template/mobanbus_qyv1/mobanbus_st/img//logo.png", "Url" =>"http://www.henkuai.com/"); }else{ $content = "功能未开发，请关注我们的最新消息。"."\n技术支持 轩宇工作室"."\n".date("Y-m-d H:i:s",time()); } if(is_array($content)){ if (isset($content[0]['PicUrl'])){ $result = $this->transmitNews($object, $content); }else if (isset($content['MusicUrl'])){ $result = $this->transmitMu…

php官方微信接口大全（微信支付、微信红包、微信摇一摇、微信小店）
type: item
date: 2018-08-13T21:14:35+08:00
description: 这篇文章主要介绍了php官方微信接口大全，包括微信支付、微信红包、微信摇一摇、微信小店，感兴趣的小伙伴们可以参考一下微信入口绑定，微信事件处理，微信API全部操作包含在这些文件中。内容有：微信摇一摇接口/微信多客服接口/微信支付接口/微信红包接口/微信卡券接口/微信小店接口/JSAPI<?php class WxApi { const appId = ""; const appSecret = ""; const mchid = ""; //商户号 const privatekey = ""; //私钥 public $parameters = array(); public $jsApiTicket = NULL; public $jsApiTime = NULL; public function __construct(){ } /**************************************************** * 微信提交API方法，返回微信指定JSON ****************************************************/ public function wxHttpsRequest($url,$data = null){ $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); if (!empty($data)){ curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); } curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $output = curl_exec($curl); curl_close($curl); return $output; } /**************************************************** * 微信带证书提交数据 - 微信红包使用 ****************************************************/ public function wxHttpsRequestPem($url, $vars, $second=30,$aHeader=array()){ $ch = curl_init(); //超时时间 curl_setopt($ch,CURLOPT_TIMEOUT,$second); curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1); //这里设置代理，如果有的话 //curl_setopt($ch,CURLOPT_PROXY, '10.206.30.98'); //curl_setopt($ch,CURLOPT_PROXYPORT, 8080); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false); //以下两种方式需选择一种 //第一种方法，cert 与 key 分别属于两个.pem文件 //默认格式为PEM，可以注释 curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM'); curl_setopt($ch,CURLOPT_SSLCERT,getcwd().'/apiclient_cert.pem'); //默认格式为PEM，可以注释 curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM'); curl_setopt($ch,CURLOPT_SSLKEY,getcwd().'/apiclient_key.pem'); curl_setopt($ch,CURLOPT_CAINFO,'PEM'); curl_setopt($ch,CURLOPT_CAINFO,getcwd().'/rootca.pem'); //第二种方式，两个文件合成一个.pem文件 //curl_setopt($ch,CURLOPT_SSLCERT,getcwd().'/all.pem'); if( count($aHeader) >= 1 ){ curl_setopt($ch…

PHP微信开发之上传临时素材
type: item
date: 2018-08-13T21:03:22+08:00
description: 这篇文章主要为大家详细介绍了PHP微信开发之简单实现上传临时素材的相关资料，感兴趣的小伙伴们可以参考一下本文实例为大家分享了php微信上传临时素材的具体代码，供大家参考，具体内容如下public function uploadImg($imgUrl){ $TOKEN=$this->getAccessToken(); $URL ='http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token='.$TOKEN.'&type=image'; $data = array('media'=>'@'.$imgUrl); $result = $this->curl_post($URL,$data); $data = @json_decode($result,true); return $data['media_id']; } public function getAccessToken(){ $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wxe574b1bd35d7d4da&secret=d4624c36b6795d1d99dcf0547af5443d'; $result = json_decode($this->curlGet($url),true); return $result['access_token']; } function curl_post($url, $data = null) { //创建一个新cURL资源 $curl = curl_init(); //设置URL和相应的选项 curl_setopt($curl, CURLOPT_URL, $url); if (!empty($data)){ curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); } curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //执行curl，抓取URL并把它传递给浏览器 $output = curl_exec($curl); //关闭cURL资源，并且释放系统资源 curl_close($curl); return $output; }调用uploadImg($imgurl) 传图片地址参数返回结果array ( 'type' => 'image', 'media_id' => 'W89mt3FEaxXOMOw0fLj2Cb6A8vfMjuXrj6XW59O3l9a7Tj_h2SjlBEr4dvp4Du2R', 'created_at' => 1464140301,

详解使用php调用微信接口上传永久素材
type: item
date: 2018-08-13T21:00:37+08:00
description: 这篇文章主要介绍了详解使用php调用微信接口上传永久素材功能需求公司新开的公众号需要将公司平台现在的所有精品文章都导入，手动导入会有很多的工作量，所以采用自动化同步文章的方式来达到效果开发说明微信open api提供了新增永久素材的接口，本次功能是基于这个接口进行数据同步的使用到的接口获取永久素材列表接口：material/batchget_material新增永久素材接口：material/add_news新增媒体文件接口：material/add_material图文类型单图文（要求有默认的封面，需要提前上传到微信公众号后台）环境要求php版本：5.5以下（因为下面代码中的上传媒体文件必须要求在此环境，否则会调用微信接口失败）开发流程1、从公司平台获取所有的文章列表2、遍历文章列表，查看文章是否有图片附件，若有进行第三步，否则进行第四步3、检测所有的附件，取出第一个图片附件，并调用新增媒体文件接口上传图片获得返回后的media_id4、调用素材列表接口获取默认的封面图片，并从中得到的数据中获取media_id5、根据返回获取到的media_id开始调用上传图文接口上传素材6、记录返回信息接口设计获取微信素材列表接口此接口是用于获取默认的图片media_id同步平台数据接口此接口是用户同步我们自己的文章数据到微信功能实现接口常量private $app_id = 'wx189ae9fa8816b131'; private $app_secret = '36f5f430c591acbae3505fe877733283'; const API_URL_PREFIX = 'https://api.weixin.qq.com/cgi-bin'; const MEDIA_FOREVER_UPLOAD_URL = '/material/add_material?'; const MEDIA_FOREVER_NEWS_UPLOAD_URL = '/material/add_news?'; const MEDIA_FOREVER_NEWS_UPDATE_URL = '/material/update_news?'; const MEDIA_FOREVER_GET_URL = '/material/get_material?'; const MEDIA_FOREVER_DEL_URL = '/material/del_material?'; const MEDIA_FOREVER_COUNT_URL = '/material/get_materialcount?'; const MEDIA_FOREVER_BATCHGET_URL = '/material/batchget_material?';获取微信素材列表接口action接口方法说明：该方法为此接口的入口方法调用方式：http://${domain}/weixin/get_articles//** * 获取图片素材接口 */ public function get_articles_action(){ $token = $this->get_access_token(); $list = $this->getForeverList($token,'image',0,20); echo json_encode($list); } get_access_token方法 private function get_access_token() { $access_token = AWS_APP::cache()->get('access_token'); if(!$access_token){ error_log('get access_token from weixin '); $appId = $this->app_id; $appSecret = $this->app_secret; $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appId&secret=$appSecret"; $res = json_decode($this -> httpGet($url)); $access_token = $res -> access_token; AWS_APP::cache()->set('access_token',$access_token,time()+3600); }else{ error_log('get access_token from cache '); } error_log('access_token is :'.$access_token); ret…

THINKPHP3.2.3实现微信公众账号根据关键字进行图文推送
type: item
date: 2018-08-12T18:01:00+08:00
description: 公众平台消息接口为开发者提供了一种新的消息处理方式，下面教程我结合THINKPHP3.2.3实现微信公众账号根据关键字进行图文推送。源码下载：560b54641fc66.zip要实现微信公众平台关键字图文推送，首先要有一个订阅号或者公众号，下面开始教程；一、参数配置 登录公众平台后台，点击开发者中心 -> 服务器配置-> 修改配置->配置项，输入URL,Token和EncodingAESKey，URL输入http://你的域名/weixin/index，Token填写weixin，EncodingAESKey填写随机生成的字符串，如下图：二、下载源码，修改配置信息将下载的源码压缩包解压，将里面的Com文件夹放入THINKPHP框架的Library文件夹中，将WeixinController.class.php放入Home模块里的Controller文件夹中，修改里面的appid为自己公众平台的appid，token为'weixin'，crypt改为上面步骤随机生成的随机字符串，如下图其他的回复信息请自行修改逻辑。