腾讯云服务器年中优惠低至2.3折,一年一次,剩余不多 >>>>

getSetting( )获取公众功能配置信息,如微信支付,短信等等

文档教程geeson 发表了文章 • 0 个评论 • 308 次浏览 • 2017-10-12 12:35 • 来自相关话题

/**
* @param int $mid 公众号标识
* @param string $name 配置项名称
* @return array|false
*/
function getSetting($mid = 0, $name = '')
{
$model = new \app\common\model\Setting();
$result = $model->getSetting(['mpid' => $mid, 'name' => $name]);
return $result;
} 查看全部
/**
* @param int $mid 公众号标识
* @param string $name 配置项名称
* @return array|false
*/
function getSetting($mid = 0, $name = '')
{
$model = new \app\common\model\Setting();
$result = $model->getSetting(['mpid' => $mid, 'name' => $name]);
return $result;
}

createQrcode( )创建二维码(phpqrcode扩展)

文档教程geeson 发表了文章 • 0 个评论 • 680 次浏览 • 2017-10-12 12:33 • 来自相关话题

/**
*
* @param string $data
* @param bool $file
* @param string $level
* @param int $size
*/
function createQrcode($data = '', $file = false, $level = 'L', $size = 4)
{
\think\Loader::import('phpqrcode.phpqrcode', EXTEND_PATH, '.php');
header("Content-type: image/png");
Qrcode::png($data, $file, $level, $size);
} 查看全部
/**
*
* @param string $data
* @param bool $file
* @param string $level
* @param int $size
*/
function createQrcode($data = '', $file = false, $level = 'L', $size = 4)
{
\think\Loader::import('phpqrcode.phpqrcode', EXTEND_PATH, '.php');
header("Content-type: image/png");
Qrcode::png($data, $file, $level, $size);
}

getForeverMaterial( )获取永久素材列表(认证后的订阅号可用)

文档教程geeson 发表了文章 • 0 个评论 • 479 次浏览 • 2017-10-12 12:30 • 来自相关话题

/**
* 获取永久素材列表(认证后的订阅号可用)
* @param string $type 素材的类型,图片(image)、视频(video)、语音 (voice)、图文(news)
* @param int $offset 全部素材的偏移位置,0表示从第一个素材
* @param int $count 返回素材的数量
* @return boolean|array
* 返回数组格式:
* array(
* 'total_count'=>0, //该类型的素材的总数
* 'item_count'=>0, //本次调用获取的素材的数量
* 'item'=>array() //素材列表数组,内容定义请参考官方文档
* )
*/
function getForeverMaterial($type, $offset, $count)
{
$weObj = getWechatActiveObj();
return $weObj->getForeverList($type, $offset, $count);
} 查看全部
/**
* 获取永久素材列表(认证后的订阅号可用)
* @param string $type 素材的类型,图片(image)、视频(video)、语音 (voice)、图文(news)
* @param int $offset 全部素材的偏移位置,0表示从第一个素材
* @param int $count 返回素材的数量
* @return boolean|array
* 返回数组格式:
* array(
* 'total_count'=>0, //该类型的素材的总数
* 'item_count'=>0, //本次调用获取的素材的数量
* 'item'=>array() //素材列表数组,内容定义请参考官方文档
* )
*/
function getForeverMaterial($type, $offset, $count)
{
$weObj = getWechatActiveObj();
return $weObj->getForeverList($type, $offset, $count);
}

getFriendInfoForApi( )通过 openid请求 API获取粉丝信息

文档教程geeson 发表了文章 • 0 个评论 • 687 次浏览 • 2017-10-12 12:29 • 来自相关话题

/**
* 获取粉丝信息(通过 OPENID 获取)(认证后的订阅号可用)
* @param $openid srting
* return array
*/
function getFriendInfoForApi($openid = '')
{
$openid || $openid = session('openid');
$Obj = getWechatObj();
return $Obj->getUserInfo($openid);
} 查看全部
/**
* 获取粉丝信息(通过 OPENID 获取)(认证后的订阅号可用)
* @param $openid srting
* return array
*/
function getFriendInfoForApi($openid = '')
{
$openid || $openid = session('openid');
$Obj = getWechatObj();
return $Obj->getUserInfo($openid);
}

getMemberInfo( )通过openid获取会员信息

文档教程geeson 发表了文章 • 2 个评论 • 728 次浏览 • 2017-10-12 12:28 • 来自相关话题

/**
* @param string $openid
* @return array|false|PDOStatement|string|\think\Model
*/
function getMemberInfo($openid = '', $field = [])
{
if ($openid = getOrSetOpenid($openid)) {
$user = \think\Db::name('mp_friends')->where(['openid' => $openid])->find();
if (!$field) {
return $user;
} else {
$fields = [];
foreach ($field as $key => $val) {
$fields[$val] = $user[$val];
}
return $fields;
}

}
} 查看全部
/**
* @param string $openid
* @return array|false|PDOStatement|string|\think\Model
*/
function getMemberInfo($openid = '', $field = [])
{
if ($openid = getOrSetOpenid($openid)) {
$user = \think\Db::name('mp_friends')->where(['openid' => $openid])->find();
if (!$field) {
return $user;
} else {
$fields = [];
foreach ($field as $key => $val) {
$fields[$val] = $user[$val];
}
return $fields;
}

}
}

getOrSetOpenid( )设置或者获取openid

文档教程geeson 发表了文章 • 0 个评论 • 555 次浏览 • 2017-10-12 12:25 • 来自相关话题

/*
* 设置、获取 openid
*/

function getOrSetOpenid($openid = '')
{
if ($openid != '') {
session('openid', $openid);
return $openid;
} else {
$openid = session('openid');
if ($openid) {
return $openid;
} else {
return null;
}
}

} 查看全部
/*
* 设置、获取 openid
*/

function getOrSetOpenid($openid = '')
{
if ($openid != '') {
session('openid', $openid);
return $openid;
} else {
$openid = session('openid');
if ($openid) {
return $openid;
} else {
return null;
}
}

}

addonUrl( )应用URL生成【常用】

文档教程geeson 发表了文章 • 0 个评论 • 597 次浏览 • 2017-10-12 12:24 • 来自相关话题

/**
* 扩展应用 URL 生成
* @author geeson myrhzq@qq.com
* @param $url string 应用url/应用名称/控制器/方法
* @param $arr array 参数
*/
function addonUrl($url = '', $vars = '', $suffix = true, $domain = false)
{
if (!empty($addonRule = session('addonRule')) || $url != '') {
$addonName = isset($addonRule['addon']) ? $addonRule['addon'] : '';
$addonController = isset($addonRule['col']) ? $addonRule['col'] : '';
$addonAction = isset($addonRule['act']) ? $addonRule['act'] : '';
$node = '';
if ($url == '') {
$node = $addonName . DS . $addonController . DS . $addonAction;
} else {
$nodeArr = array_values(array_filter(explode('/', $url)));
switch (count($nodeArr)) {
case 1:
$node = $addonName . DS . $addonController . DS . $nodeArr[0];
break;
case 2:
$node = $addonName . DS . $nodeArr[0] . DS . $nodeArr[1];
break;
case 3:
$node = $node = $nodeArr[0] . DS . $nodeArr[1] . DS . $nodeArr[2];
break;
}
}
if (!empty($mid = input('mid'))) {
if (is_array($vars)) {
$vars = array_merge($vars, ['mid' => $mid]);
} elseif ($vars != '' && !is_array($vars)) {
$vars = $vars . '&' . 'mid=' . $mid;
} else {
$vars = ['mid' => $mid];
}
}
$url = \think\Url::build(ADDON_ROUTE . $node, $vars, $suffix, $domain);
return $url = str_replace('.' . config('template.view_suffix'), '', $url);

}
} 查看全部
/**
* 扩展应用 URL 生成
* @author geeson myrhzq@qq.com
* @param $url string 应用url/应用名称/控制器/方法
* @param $arr array 参数
*/
function addonUrl($url = '', $vars = '', $suffix = true, $domain = false)
{
if (!empty($addonRule = session('addonRule')) || $url != '') {
$addonName = isset($addonRule['addon']) ? $addonRule['addon'] : '';
$addonController = isset($addonRule['col']) ? $addonRule['col'] : '';
$addonAction = isset($addonRule['act']) ? $addonRule['act'] : '';
$node = '';
if ($url == '') {
$node = $addonName . DS . $addonController . DS . $addonAction;
} else {
$nodeArr = array_values(array_filter(explode('/', $url)));
switch (count($nodeArr)) {
case 1:
$node = $addonName . DS . $addonController . DS . $nodeArr[0];
break;
case 2:
$node = $addonName . DS . $nodeArr[0] . DS . $nodeArr[1];
break;
case 3:
$node = $node = $nodeArr[0] . DS . $nodeArr[1] . DS . $nodeArr[2];
break;
}
}
if (!empty($mid = input('mid'))) {
if (is_array($vars)) {
$vars = array_merge($vars, ['mid' => $mid]);
} elseif ($vars != '' && !is_array($vars)) {
$vars = $vars . '&' . 'mid=' . $mid;
} else {
$vars = ['mid' => $mid];
}
}
$url = \think\Url::build(ADDON_ROUTE . $node, $vars, $suffix, $domain);
return $url = str_replace('.' . config('template.view_suffix'), '', $url);

}
}

getAddonLogo( )获取应用LOGO

文档教程geeson 发表了文章 • 0 个评论 • 476 次浏览 • 2017-10-12 12:22 • 来自相关话题

/**
* @param string $name 应用标识
* @param $logoName
*/

function getAddonLogo($name = '')
{
if ($name == '') {
return false;
}
$model = new \app\common\model\Addons();
$info = $model->getAddonByFile($name);
$loginFile= ROOT_PATH. '/addons/' . $name . '/' . $info['logo'];
if(is_file($loginFile)){
if($fp = fopen($loginFile,"rb", 0))
{
$gambar = fread($fp,filesize($loginFile));
fclose($fp);
$base64 = chunk_split(base64_encode($gambar));
return $encode = 'data:image/jpg/png/gif;base64,' . $base64 ;
}
}
} 查看全部
/**
* @param string $name 应用标识
* @param $logoName
*/

function getAddonLogo($name = '')
{
if ($name == '') {
return false;
}
$model = new \app\common\model\Addons();
$info = $model->getAddonByFile($name);
$loginFile= ROOT_PATH. '/addons/' . $name . '/' . $info['logo'];
if(is_file($loginFile)){
if($fp = fopen($loginFile,"rb", 0))
{
$gambar = fread($fp,filesize($loginFile));
fclose($fp);
$base64 = chunk_split(base64_encode($gambar));
return $encode = 'data:image/jpg/png/gif;base64,' . $base64 ;
}
}
}

getAddonInfo( )获取应用配置信息

文档教程geeson 发表了文章 • 0 个评论 • 490 次浏览 • 2017-10-12 12:21 • 来自相关话题

/**
* 获取应用配置信息
* @author geeson myrhzq@qq.com
* $param $addonName string // 当前应用插件名称
* @param string mid 当前公众号标识ID
* @return array|bool|mixed
*/
function getAddonInfo($addonName = '', $mid = '')
{
if ($addonName == '' || $mid == '') {
$addonName = session('addonName');
$mid = session('mid')?session('mid'):input('mid');
}
if ($addonName == '' || $mid == '') {
exit('参数不完整:应用名称或者公众号标识不存在');
}
$addon = \think\Db::name('addons')->where(['addon' => $addonName])->find();
$addonInfo = \think\Db::name('addon_info')->where(['addon' => $addonName, 'mpid' => input('mid')])->find();
$addon['path'] = ADDON_PATH . $addonName . '/';
$addon['mp_config'] = json_decode($addonInfo['infos'], true);
$addon['common_config'] = json_decode($addon['config'], true);
unset($addon['config']);
return $addon;

}获取当前的应用一般不需要传参 查看全部
/**
* 获取应用配置信息
* @author geeson myrhzq@qq.com
* $param $addonName string // 当前应用插件名称
* @param string mid 当前公众号标识ID
* @return array|bool|mixed
*/
function getAddonInfo($addonName = '', $mid = '')
{
if ($addonName == '' || $mid == '') {
$addonName = session('addonName');
$mid = session('mid')?session('mid'):input('mid');
}
if ($addonName == '' || $mid == '') {
exit('参数不完整:应用名称或者公众号标识不存在');
}
$addon = \think\Db::name('addons')->where(['addon' => $addonName])->find();
$addonInfo = \think\Db::name('addon_info')->where(['addon' => $addonName, 'mpid' => input('mid')])->find();
$addon['path'] = ADDON_PATH . $addonName . '/';
$addon['mp_config'] = json_decode($addonInfo['infos'], true);
$addon['common_config'] = json_decode($addon['config'], true);
unset($addon['config']);
return $addon;

}
获取当前的应用一般不需要传参

getMpInfo( )获取公众号配置信息

文档教程geeson 发表了文章 • 0 个评论 • 572 次浏览 • 2017-10-12 12:19 • 来自相关话题

/**
* 获取公众号配置信息
* @param $mid number
*/

function getMpInfo($mid = '')
{
$mid ? $mid : $mid = input('mid');
$mpInfo = 'mpInfo_' . $mid;
if ($mid) {
$mp = \think\Db::name('mp')->where(['id' => $mid])->find();
if (!empty($mp)) {
return $mp;
} else {
abort(500, lang('没有找到相应的公众号信息'));
}

} else {
abort(500, lang('没有找到相应的公众号信息'));
}

} 查看全部
/**
* 获取公众号配置信息
* @param $mid number
*/

function getMpInfo($mid = '')
{
$mid ? $mid : $mid = input('mid');
$mpInfo = 'mpInfo_' . $mid;
if ($mid) {
$mp = \think\Db::name('mp')->where(['id' => $mid])->find();
if (!empty($mp)) {
return $mp;
} else {
abort(500, lang('没有找到相应的公众号信息'));
}

} else {
abort(500, lang('没有找到相应的公众号信息'));
}

}

getQrshortUrl( )长链接转短链接接口

文档教程geeson 发表了文章 • 0 个评论 • 463 次浏览 • 2017-10-12 12:17 • 来自相关话题

/**
* 长链接转短链接接口
* @param string $long_url 传入要转换的长url
* @return boolean|string url 成功则返回转换后的短url
*/
function getQrshortUrl($long_url)
{
$weObj = getWechatActiveObj();
return $weObj->getShortUrl($long_url);
} 查看全部
/**
* 长链接转短链接接口
* @param string $long_url 传入要转换的长url
* @return boolean|string url 成功则返回转换后的短url
*/
function getQrshortUrl($long_url)
{
$weObj = getWechatActiveObj();
return $weObj->getShortUrl($long_url);
}

getQrRUL( )获取二维码图片

文档教程geeson 发表了文章 • 0 个评论 • 632 次浏览 • 2017-10-12 12:16 • 来自相关话题

/**
* 获取二维码图片
* @param string $ticket 传入由get_qrcode方法生成的ticket参数
* @return string url 返回http地址
*/

function getQrRUL($ticket)
{
$weObj = getWechatActiveObj();
$result = $weObj->getQRUrl($ticket);
return $result;


} 查看全部
/**
* 获取二维码图片
* @param string $ticket 传入由get_qrcode方法生成的ticket参数
* @return string url 返回http地址
*/

function getQrRUL($ticket)
{
$weObj = getWechatActiveObj();
$result = $weObj->getQRUrl($ticket);
return $result;


}

get_qrcode( )创建二维码ticket

文档教程geeson 发表了文章 • 0 个评论 • 628 次浏览 • 2017-10-12 12:15 • 来自相关话题

/**
* 创建二维码ticket
* @param int|string $scene_id 自定义追踪id,临时二维码只能用数值型
* @param int $type 0:临时二维码;1:永久二维码(此时expire参数无效);2:永久二维码(此时expire参数无效)
* @param int $expire 临时二维码有效期,最大为604800秒

* @return array('ticket'=>'qrcode字串','expire_seconds'=>1800,'url'=>'二维码图片解析后的地址')
*/
function get_qrcode($scene_id, $type = 0, $expire = 1800)
{
$weObj = getWechatActiveObj();
$result = $weObj->getQRCode($scene_id, $type, $expire);
if (!$result) {
$return['errcode'] = 1001;
$return['errmsg'] = $weObj->errMsg;
// abort(500, lang('ErrCode:' . $return['errcode'] . ' ErrMsg: ' . $return['errmsg']));
ajaxMsg(0, 'ErrCode:' . $return['errcode'] . ' ErrMsg: ' . $return['errmsg']);
}
return $result;
} 查看全部
/**
* 创建二维码ticket
* @param int|string $scene_id 自定义追踪id,临时二维码只能用数值型
* @param int $type 0:临时二维码;1:永久二维码(此时expire参数无效);2:永久二维码(此时expire参数无效)
* @param int $expire 临时二维码有效期,最大为604800秒

* @return array('ticket'=>'qrcode字串','expire_seconds'=>1800,'url'=>'二维码图片解析后的地址')
*/
function get_qrcode($scene_id, $type = 0, $expire = 1800)
{
$weObj = getWechatActiveObj();
$result = $weObj->getQRCode($scene_id, $type, $expire);
if (!$result) {
$return['errcode'] = 1001;
$return['errmsg'] = $weObj->errMsg;
// abort(500, lang('ErrCode:' . $return['errcode'] . ' ErrMsg: ' . $return['errmsg']));
ajaxMsg(0, 'ErrCode:' . $return['errcode'] . ' ErrMsg: ' . $return['errmsg']);
}
return $result;
}

sendGroupMassMessage( ) 高级群发消息

文档教程geeson 发表了文章 • 0 个评论 • 546 次浏览 • 2017-10-12 12:14 • 来自相关话题

/**
* 高级群发消息, 根据群组id群发图文消息(认证后的订阅号可用)
* 注意:视频需要在调用uploadMedia()方法后,再使用 uploadMpVideo() 方法生成,
* 然后获得的 mediaid 才能用于群发,且消息类型为 mpvideo 类型。
* @param array $data 消息结构
* {
* "filter"=>array(
* "is_to_all"=>False, //是否群发给所有用户.True不用分组id,False需填写分组id
* "group_id"=>"2" //群发的分组id
* ),
* "msgtype"=>"mpvideo",
* // 在下面5种类型中选择对应的参数内容
* // mpnews | voice | image | mpvideo => array( "media_id"=>"MediaId")
* // text => array ( "content" => "hello")
* }
* @return boolean|array
*/
function sendGroupMassMessage($data)
{
$weObj = getWechatActiveObj();
$result = $weObj->sendGroupMassMessage($data);
if ($result) {
return $result;
} else {
$return['errCode'] = $weObj->errCode;
$return['errMsg'] = $weObj->errMsg;
return $return;
}
} 查看全部
/**
* 高级群发消息, 根据群组id群发图文消息(认证后的订阅号可用)
* 注意:视频需要在调用uploadMedia()方法后,再使用 uploadMpVideo() 方法生成,
* 然后获得的 mediaid 才能用于群发,且消息类型为 mpvideo 类型。
* @param array $data 消息结构
* {
* "filter"=>array(
* "is_to_all"=>False, //是否群发给所有用户.True不用分组id,False需填写分组id
* "group_id"=>"2" //群发的分组id
* ),
* "msgtype"=>"mpvideo",
* // 在下面5种类型中选择对应的参数内容
* // mpnews | voice | image | mpvideo => array( "media_id"=>"MediaId")
* // text => array ( "content" => "hello")
* }
* @return boolean|array
*/
function sendGroupMassMessage($data)
{
$weObj = getWechatActiveObj();
$result = $weObj->sendGroupMassMessage($data);
if ($result) {
return $result;
} else {
$return['errCode'] = $weObj->errCode;
$return['errMsg'] = $weObj->errMsg;
return $return;
}
}

replyNews( )回复图文

文档教程geeson 发表了文章 • 0 个评论 • 714 次浏览 • 2017-10-12 12:12 • 来自相关话题

/**
* 回复图文
* @author geeson myrhzq@qq.com
* @param $news array
数组结构:
array(
"0"=>array(
'Title'=>'msg title',
'Description'=>'Description text',
'PicUrl'=>'http://www.domain.com/1.jpg',
'Url'=>'http://www.domain.com/1.html'
),
"1"=>....
)
*/
function replyNews($new = [])
{
if (is_array($new)) {
$weObj = getWechatObj();
return $weObj->news($new)->reply();
}

} 查看全部
/**
* 回复图文
* @author geeson myrhzq@qq.com
* @param $news array
数组结构:
array(
"0"=>array(
'Title'=>'msg title',
'Description'=>'Description text',
'PicUrl'=>'http://www.domain.com/1.jpg',
'Url'=>'http://www.domain.com/1.html'
),
"1"=>....
)
*/
function replyNews($new = [])
{
if (is_array($new)) {
$weObj = getWechatObj();
return $weObj->news($new)->reply();
}

}

replyVideo( )回复视频消息

文档教程geeson 发表了文章 • 0 个评论 • 417 次浏览 • 2017-10-12 12:09 • 来自相关话题

/*
* 回复视频消息
* @param $mediaid string
* @param $title string
* @param $description string
*/
function replyVideo($mediaid = '', $title = '', $description = '')
{
$weObj = getWechatObj();
return $weObj->video($mediaid, $title, $description)->reply();
} 查看全部
/*
* 回复视频消息
* @param $mediaid string
* @param $title string
* @param $description string
*/
function replyVideo($mediaid = '', $title = '', $description = '')
{
$weObj = getWechatObj();
return $weObj->video($mediaid, $title, $description)->reply();
}

replyVoice( )回复语音消息

文档教程geeson 发表了文章 • 0 个评论 • 419 次浏览 • 2017-10-12 12:08 • 来自相关话题

/**
* 回复语音消息
* @param string media_id
*
*/
function replyVoice($media_id = '')
{
$weObj = getWechatObj();
return $weObj->voice($media_id)->reply();
} 查看全部
/**
* 回复语音消息
* @param string media_id
*
*/
function replyVoice($media_id = '')
{
$weObj = getWechatObj();
return $weObj->voice($media_id)->reply();
}

replyMusic( )回复音乐

文档教程geeson 发表了文章 • 0 个评论 • 403 次浏览 • 2017-10-12 12:08 • 来自相关话题

/**
* 设置回复音乐
* @param string $title
* @param string $desc
* @param string $musicurl
* @param string $hgmusicurl
* @param string $thumbmediaid 音乐图片缩略图的媒体id,非必须
*/
function replyMusic($title, $desc, $musicurl, $hgmusicurl = '', $thumbmediaid = '')
{
$weObj = getWechatObj();
return $weObj->music($title, $desc, $musicurl, $hgmusicurl = '', $thumbmediaid = '')->reply();

} 查看全部
/**
* 设置回复音乐
* @param string $title
* @param string $desc
* @param string $musicurl
* @param string $hgmusicurl
* @param string $thumbmediaid 音乐图片缩略图的媒体id,非必须
*/
function replyMusic($title, $desc, $musicurl, $hgmusicurl = '', $thumbmediaid = '')
{
$weObj = getWechatObj();
return $weObj->music($title, $desc, $musicurl, $hgmusicurl = '', $thumbmediaid = '')->reply();

}

replyImage( )回复图片

文档教程geeson 发表了文章 • 0 个评论 • 473 次浏览 • 2017-10-12 12:07 • 来自相关话题

/**
* 回复图片
* @param string $media_id
*/

function replyImage($media_id = '')
{

$weObj = getWechatObj();
return $weObj->image($media_id)->reply();
} 查看全部
/**
* 回复图片
* @param string $media_id
*/

function replyImage($media_id = '')
{

$weObj = getWechatObj();
return $weObj->image($media_id)->reply();
}

replyText()回复文本

文档教程geeson 发表了文章 • 0 个评论 • 265 次浏览 • 2017-10-12 12:06 • 来自相关话题

/**
* 回复文本
* @param $text string
*/
function replyText($text = null)
{
if (is_string($text)) {
$weObj = getWechatObj();
return $weObj->text($text)->reply();
}

} 查看全部
/**
* 回复文本
* @param $text string
*/
function replyText($text = null)
{
if (is_string($text)) {
$weObj = getWechatObj();
return $weObj->text($text)->reply();
}

}

uploadForeverMedia( )上传永久素材

文档教程geeson 发表了文章 • 0 个评论 • 494 次浏览 • 2017-10-12 12:04 • 来自相关话题

/**
* 上传永久素材(认证后的订阅号可用)
* 新增的永久素材也可以在公众平台官网素材管理模块中看到
* $param string filePath 注意是物理路径
* @param type 类型:图片:image 语音:voice 视频:video 缩略图:thumb
* @param boolean $is_video 是否为视频文件,默认为否
* @param array $video_info 视频信息数组,非视频素材不需要提供 array('title'=>'视频标题','introduction'=>'描述')
* @return boolean|array
*/
function uploadForeverMedia($filePath = '', $type, $is_video = false, $video_info = array())
{

$weObj = getWechatActiveObj();
$media = $weObj->uploadForeverMedia(['media' => '@' . ROOT_PATH . $filePath], $type, $is_video, $video_info);
if (empty($media)) {
ajaxMsg(0, 'errCode:' . $weObj->errCode . 'errMsg' . $weObj->errMsg);
}
return $media;

} 查看全部
/**
* 上传永久素材(认证后的订阅号可用)
* 新增的永久素材也可以在公众平台官网素材管理模块中看到
* $param string filePath 注意是物理路径
* @param type 类型:图片:image 语音:voice 视频:video 缩略图:thumb
* @param boolean $is_video 是否为视频文件,默认为否
* @param array $video_info 视频信息数组,非视频素材不需要提供 array('title'=>'视频标题','introduction'=>'描述')
* @return boolean|array
*/
function uploadForeverMedia($filePath = '', $type, $is_video = false, $video_info = array())
{

$weObj = getWechatActiveObj();
$media = $weObj->uploadForeverMedia(['media' => '@' . ROOT_PATH . $filePath], $type, $is_video, $video_info);
if (empty($media)) {
ajaxMsg(0, 'errCode:' . $weObj->errCode . 'errMsg' . $weObj->errMsg);
}
return $media;

}

uploadMedia()上传临时素材

文档教程geeson 发表了文章 • 2 个评论 • 553 次浏览 • 2017-10-12 12:03 • 来自相关话题

/**
* 上传临时素材
* 上传临时素材,有效期为3天(认证后的订阅号可用)
* @param string filePath 注意是物理路径
* @param string 类型:图片:image 语音:voice 视频:video 缩略图:thumb
*/
function uploadMedia($filePath = '', $type = '')
{
$weObj = getWechatActiveObj();
$media = $weObj->uploadMedia(['media' => '@' . ROOT_PATH . $filePath], $type);
if (empty($media)) {
ajaxMsg(0, 'errCode:' . $weObj->errCode . 'errMsg' . $weObj->errMsg);
}
return $media;
} 查看全部
/**
* 上传临时素材
* 上传临时素材,有效期为3天(认证后的订阅号可用)
* @param string filePath 注意是物理路径
* @param string 类型:图片:image 语音:voice 视频:video 缩略图:thumb
*/
function uploadMedia($filePath = '', $type = '')
{
$weObj = getWechatActiveObj();
$media = $weObj->uploadMedia(['media' => '@' . ROOT_PATH . $filePath], $type);
if (empty($media)) {
ajaxMsg(0, 'errCode:' . $weObj->errCode . 'errMsg' . $weObj->errMsg);
}
return $media;
}

【第六篇】微信开发应用之Api.php介绍

文档教程geeson 发表了文章 • 5 个评论 • 2391 次浏览 • 2017-10-11 12:42 • 来自相关话题

在微信开发的第一篇有说明了Api.php:http://ask.rhaphp.com/article/7
在这一篇主要介绍与微信如何交互与通信的,这里我创建是一个名称 myDemo的应用作为演示。目录文件如下图:





如果你对目录不了解请回头回文档,创建好之后,然后系统的后台进入此演示应用,在响应中设置关键词,当然也可以在自动回复中增加关键词然后选择演示应用,两者可选。你觉得那个方便使用那个。关键词设为:rhaphp,如下图:





也可以在自动回复中可以设置的,设置完成后可以看到,如下图:





粉丝触发关键词如何回复文本?很简单的代码如下:public function message($msg = [], $param = [])
{
replyText('二狗,你好!你触发了myDemo');
}在公众号输入rhaphp后,效果如下图:





如何看到微信发送的消息?public function message($msg = [], $param = [])
{
replyText(json_encode($msg));
}因为$msg是数据来的,文本方式回复那么我们要把$msg转成json。效果如下图:






当然还可以回复其它,图文消息,图片消息,视频消息等,我在介绍函数文档会说明。 查看全部
在微信开发的第一篇有说明了Api.php:http://ask.rhaphp.com/article/7
在这一篇主要介绍与微信如何交互与通信的,这里我创建是一个名称 myDemo的应用作为演示。目录文件如下图:

1.png

如果你对目录不了解请回头回文档,创建好之后,然后系统的后台进入此演示应用,在响应中设置关键词,当然也可以在自动回复中增加关键词然后选择演示应用,两者可选。你觉得那个方便使用那个。关键词设为:rhaphp,如下图:

1.png

也可以在自动回复中可以设置的,设置完成后可以看到,如下图:

1.png

粉丝触发关键词如何回复文本?很简单的代码如下:
public function message($msg = [], $param = [])
{
replyText('二狗,你好!你触发了myDemo');
}
在公众号输入rhaphp后,效果如下图:

1.png

如何看到微信发送的消息?
public function message($msg = [], $param = [])
{
replyText(json_encode($msg));
}
因为$msg是数据来的,文本方式回复那么我们要把$msg转成json。效果如下图:


1.png

当然还可以回复其它,图文消息,图片消息,视频消息等,我在介绍函数文档会说明。

【第五篇】 RhaPHP微信应用开发之视图view

文档教程geeson 发表了文章 • 0 个评论 • 2007 次浏览 • 2017-10-10 13:08 • 来自相关话题

应用的视图是支持模板的继承,从官方提供的投票的应用中有使用到,如下图:




因为开发使用得最多的就是模板继承,在使用上也是比较简单与好用的。如果有同学从来都没有没有接触过,建议你去看一下 THINKPHP5文档中模板继承。如果你想按着老套路的当然也是可以的,但是我建议你要跟上流行的节奏。

如何引入应用下的 static里面的资源?如我要引入 static/css/style.css 代码如下:{CSS href="__ADDONSTATIC__/css/style.css" /}__ADDONSTATIC__也是自动的识别当前应用的路径。

如何使用微信的JSSDK?代码如下: {:hook('Jssdk')}当你使用此行为后,并需要你再去配置 JSSDK 任何的东西,系统已经本身已经配置好了,只要你使用了{:hook('Jssdk')}系统已经为你做好了一切。如果报错的话,(签名错误呀,URL不合Fa呀)请不要尝试在系统找原因,只要填写相应的参数是正确的,公众号配置是正确的,那么系统99%是正常的。

投票应用中的代码,如下图:





若配置成功,那么你就可以在 wx.ready中使用你需要的接口了。

使用上传组件:{:hook('Upload',['type'=>'image','name'=>'cover'])}如果你需要传入值:{:hook('Upload',['type'=>'image','name'=>'input name的名称','value'=>'路径'])}多图上传:{:hook('Upload',['type'=>'images','name'=>$v.name,'value'=>$v.value])}需要使用媒体库的话:{:hook('Upload',['type'=>'images','name'=>$v.name,'material'=>true,'value'=>$v.value])}上传文件:{:hook('Upload',['type'=>'file','name'=>$v.name,'bt_title'=>'选择文件','value'=>$v.value])}如何对应用生成 URL?使用:addonUrl()
// 与THINKPHP5 中的 URL()使用方法也是一样的,投票应用使用到
$.post("{:addonUrl('toVote')}",{'bm_id':id},function (res) {
layer.close(index);
layer.msg(res.msg);
})
完整的传入:应用名称/控制器/方法
如果在相同的控制器里跳转,可以只传方法名就可以了。更多可以参考 thinkphp中的 URL函数 查看全部
应用的视图是支持模板的继承,从官方提供的投票的应用中有使用到,如下图:
1.png

因为开发使用得最多的就是模板继承,在使用上也是比较简单与好用的。如果有同学从来都没有没有接触过,建议你去看一下 THINKPHP5文档中模板继承。如果你想按着老套路的当然也是可以的,但是我建议你要跟上流行的节奏。

如何引入应用下的 static里面的资源?如我要引入 static/css/style.css 代码如下:
{CSS href="__ADDONSTATIC__/css/style.css" /}
__ADDONSTATIC__也是自动的识别当前应用的路径。

如何使用微信的JSSDK?代码如下:
 {:hook('Jssdk')}
当你使用此行为后,并需要你再去配置 JSSDK 任何的东西,系统已经本身已经配置好了,只要你使用了{:hook('Jssdk')}系统已经为你做好了一切。如果报错的话,(签名错误呀,URL不合Fa呀)请不要尝试在系统找原因,只要填写相应的参数是正确的,公众号配置是正确的,那么系统99%是正常的。

投票应用中的代码,如下图

1.png

若配置成功,那么你就可以在 wx.ready中使用你需要的接口了。

使用上传组件:
{:hook('Upload',['type'=>'image','name'=>'cover'])}
如果你需要传入值:
{:hook('Upload',['type'=>'image','name'=>'input name的名称','value'=>'路径'])}
多图上传:
{:hook('Upload',['type'=>'images','name'=>$v.name,'value'=>$v.value])}
需要使用媒体库的话:
{:hook('Upload',['type'=>'images','name'=>$v.name,'material'=>true,'value'=>$v.value])}
上传文件:
{:hook('Upload',['type'=>'file','name'=>$v.name,'bt_title'=>'选择文件','value'=>$v.value])}
如何对应用生成 URL?使用:
addonUrl()
// 与THINKPHP5 中的 URL()使用方法也是一样的,投票应用使用到
$.post("{:addonUrl('toVote')}",{'bm_id':id},function (res) {
layer.close(index);
layer.msg(res.msg);
})

完整的传入:应用名称/控制器/方法
如果在相同的控制器里跳转,可以只传方法名就可以了。更多可以参考 thinkphp中的 URL函数

【第四篇】开发微信应用之继承Addon类介绍

文档教程geeson 发表了文章 • 10 个评论 • 1752 次浏览 • 2017-10-09 14:02 • 来自相关话题

Api.php是与微信交互响应控制器,因此该控制器并不需要继承Addon,其它在 controller目录下的控制器,如果没有特别的情况,我们建议你都继承 Addon,因为它能够在开发帮你处理很多东西,快速开发。
如何显示模板与模板赋值?<?php
namespace addons\myDemo\controller;
use app\common\controller\Addon;

class index extends Addon
{
public function index(){
$this->assign('name','RhaPHP');
$this->fetch();
}

}经常使用到的有:public function demo()
{
dump($this->mid);//获取公众号有标识 ID
dump($this->mpInfo);//获取公众号信息
dump($this->getAaddonConfigByMp);//获取当前公众的当前应用配置信息
dump($this->addonInfoByFile);//获取当前公众的当前应用Config.php文件中的config配置项
dump($this->addonInfoByDb);//获取当前公众的当前应用安装后的数据库中的配置Config.php文件中的config配置项

}因为要更加灵活,所以控制不分前台或者后台,如果你当前控制器需要管理员才能操作的怎么办?其实也是很简单的:代码如下:class index extends Addon
{
public $adminLogin=true;//需要管理员登录才可操作本控制器
public function index()
{

$this->assign('name', 'RhaPHP');
$this->fetch();
} public $adminLogin=true;设为 true 系统认为该控制器是管理员才可以操作的。拥有业务菜单的控制器都需要此项。

如果你想把页面只限于微信里面打开:class index extends Addon
{

public $onlyWexinOpen=true;//限制需要在微信里面打开
public function index()
{
$this->assign('name', 'RhaPHP');
$this->fetch();
}


如果此应用需要微信授权登录?class index extends Addon
{
public $isWexinLogin=true;//需要微信授权登录
public function index()
{

$this->assign('name', 'RhaPHP');
$this->fetch();
}这里需要你注意一下,这里考虑到了一些没有授权登录权限的公众号。所以使用微信登录首先要到公众号-》【授权&注册】先配置好。如下图:





有网页授权登录权限的请选择系统自动注册,没有授权登录的请选择回复注册|登录。回复注册|登录是使用响应机制的。你可以设置关键词,或者自定菜单触发关键词,然后系统会以图文形式回复为登录入口。其中的跳转地址就是用户点击进入完成登录后,需要跳到的页面地址,一般是你的应用地址。这里的目录就是获取到粉丝的 openid.这里出发点是考虑到没有授权的公众号要做会员中心,用户组,优惠率,等等。

重点重点重点的来了!!!!!
这里可能有同学要骂我了?如果我很多应用都需要获取 openid啊,你这里跳转地址只有一个哇。其实我已经帮你想到这个问题的啦。按照国际惯例,没有页面授权登录的公众号的微信应用都使用了回复关键词或者自定菜单触发关键词,回复图文,然后进入该应用后系统自动的把 openid 传参到该应用的 URL中了 使用 get,或者 input()获取 openid。后台配置如下图:






还有很多比较有意思的设计逻辑。大家在使用过程自然会发现的。有任何改进或者问题欢迎大家反馈。谢谢大家
  查看全部
Api.php是与微信交互响应控制器,因此该控制器并不需要继承Addon,其它在 controller目录下的控制器,如果没有特别的情况,我们建议你都继承 Addon,因为它能够在开发帮你处理很多东西,快速开发。
如何显示模板与模板赋值?
<?php
namespace addons\myDemo\controller;
use app\common\controller\Addon;

class index extends Addon
{
public function index(){
$this->assign('name','RhaPHP');
$this->fetch();
}

}
经常使用到的有:
public function demo()
{
dump($this->mid);//获取公众号有标识 ID
dump($this->mpInfo);//获取公众号信息
dump($this->getAaddonConfigByMp);//获取当前公众的当前应用配置信息
dump($this->addonInfoByFile);//获取当前公众的当前应用Config.php文件中的config配置项
dump($this->addonInfoByDb);//获取当前公众的当前应用安装后的数据库中的配置Config.php文件中的config配置项

}
因为要更加灵活,所以控制不分前台或者后台,如果你当前控制器需要管理员才能操作的怎么办?其实也是很简单的:代码如下:
class index extends Addon
{
public $adminLogin=true;//需要管理员登录才可操作本控制器
public function index()
{

$this->assign('name', 'RhaPHP');
$this->fetch();
}
 public $adminLogin=true;设为 true 系统认为该控制器是管理员才可以操作的。拥有业务菜单的控制器都需要此项。

如果你想把页面只限于微信里面打开:
class index extends Addon
{

public $onlyWexinOpen=true;//限制需要在微信里面打开
public function index()
{
$this->assign('name', 'RhaPHP');
$this->fetch();
}


如果此应用需要微信授权登录?
class index extends Addon
{
public $isWexinLogin=true;//需要微信授权登录
public function index()
{

$this->assign('name', 'RhaPHP');
$this->fetch();
}
这里需要你注意一下,这里考虑到了一些没有授权登录权限的公众号。所以使用微信登录首先要到公众号-》【授权&注册】先配置好。如下图:

1.png

有网页授权登录权限的请选择系统自动注册,没有授权登录的请选择回复注册|登录。回复注册|登录是使用响应机制的。你可以设置关键词,或者自定菜单触发关键词,然后系统会以图文形式回复为登录入口。其中的跳转地址就是用户点击进入完成登录后,需要跳到的页面地址,一般是你的应用地址。这里的目录就是获取到粉丝的 openid.这里出发点是考虑到没有授权的公众号要做会员中心,用户组,优惠率,等等。

重点重点重点的来了!!!!!
这里可能有同学要骂我了?如果我很多应用都需要获取 openid啊,你这里跳转地址只有一个哇。其实我已经帮你想到这个问题的啦。按照国际惯例,没有页面授权登录的公众号的微信应用都使用了回复关键词或者自定菜单触发关键词,回复图文,然后进入该应用后系统自动的把 openid 传参到该应用的 URL中了 使用 get,或者 input()获取 openid。后台配置如下图:

1.png


还有很多比较有意思的设计逻辑。大家在使用过程自然会发现的。有任何改进或者问题欢迎大家反馈。谢谢大家