微信公众号支付开发演示的应用

应用&插件geeson 发表了文章 • 0 个评论 • 2171 次浏览 • 2018-05-11 14:00 • 来自相关话题

这是使用最简的代码实现微信支付演示的应用。适合新手学习!教程请前往开发文档<?php
namespace addons\rhaPay\controller;
use app\common\controller\Addon;
use app\common\model\Payment;
class Index extends Addon
{
public $isWexinLogin=true;
public function index(){
$money =1;//设置金额
$member = getMember();//获取会员信息
$model = new Payment();
$id = $model->addPayment($member['id'], $this->mid, $money, '微信支付演示');
$payUrl=getWxPayUrl($this->mid,['payment_id' => $id,'view'=>$this->addonRoot.'/view/index/pay.html']);
$this->redirect($payUrl);
}
} 查看全部
这是使用最简的代码实现微信支付演示的应用。适合新手学习!教程请前往开发文档
<?php
namespace addons\rhaPay\controller;
use app\common\controller\Addon;
use app\common\model\Payment;
class Index extends Addon
{
public $isWexinLogin=true;
public function index(){
$money =1;//设置金额
$member = getMember();//获取会员信息
$model = new Payment();
$id = $model->addPayment($member['id'], $this->mid, $money, '微信支付演示');
$payUrl=getWxPayUrl($this->mid,['payment_id' => $id,'view'=>$this->addonRoot.'/view/index/pay.html']);
$this->redirect($payUrl);
}
}

请问下一步开发计划内容是什么

回复

提问咖啡 发起了问题 • 2 人关注 • 0 个回复 • 879 次浏览 • 2018-05-04 10:22 • 来自相关话题

关于win平台环境access_token无效,清空缓存又正常了

回复

公告geeson 发起了问题 • 1 人关注 • 0 个回复 • 1120 次浏览 • 2018-04-27 16:35 • 来自相关话题

rhaphp 不同模块的链接怎么写

回复

提问十一郎 发起了问题 • 1 人关注 • 0 个回复 • 831 次浏览 • 2018-04-17 11:04 • 来自相关话题

以微信第三方平台方式接入

回复

提问wuzhuoqing 发起了问题 • 1 人关注 • 0 个回复 • 1022 次浏览 • 2018-03-31 01:38 • 来自相关话题

在一个脚本里既发送图文消息,又发送图片 消息,只能哪个在前哪个就可以发送成功,后面的发送不成功

回复

提问zsl 发起了问题 • 1 人关注 • 0 个回复 • 1021 次浏览 • 2018-03-25 17:46 • 来自相关话题

由nginx转发的路由,系统里面会有问题

回复

提问zsl 发起了问题 • 1 人关注 • 0 个回复 • 1407 次浏览 • 2018-03-21 23:01 • 来自相关话题

每天都上来看一下支持小程序的版本发布了没有

回复

反馈likai 发起了问题 • 1 人关注 • 0 个回复 • 936 次浏览 • 2018-03-11 08:14 • 来自相关话题

【rhaphp小更新】对fetch改进支持应用模板主题化

公告geeson 发表了文章 • 0 个评论 • 1917 次浏览 • 2018-01-24 13:58 • 来自相关话题

昨天更新到1.3.1后发现没有fetch没有支持应用模板主题化。因为在我们开发应用中,需要更换模板主题,这个是很常用的,所以今天给补上了。下面介绍一面如何去使用:
当: public function index(){

$this->fetch();
}显示当前应用的index.html public function index(){

$this->fetch('MyHome');
}显示当前应用的MyHome.htmlpublic function index(){

$this->fetch('MyHome.tpl');
}显示当前应用的MyHome.tplpublic function index(){

$this->fetch('Home/index');
}显示当前应用的Home控制器的index(跨控制器)

主题化:public function index(){

$this->fetch('@default/index');
}显示view/default/当前控制器(自动获取)/index.html。public function index(){

$this->fetch('@default/Home/index');
}显示view/default/home(可跨控制器)/index.html。
更新包已经准备好,后台一键更新即可!
另外:如果有使用万能表单应用,报模板不存在的,重新下载上传即可! 查看全部
昨天更新到1.3.1后发现没有fetch没有支持应用模板主题化。因为在我们开发应用中,需要更换模板主题,这个是很常用的,所以今天给补上了。下面介绍一面如何去使用:
当:
 public function index(){

$this->fetch();
}
显示当前应用的index.html
 public function index(){

$this->fetch('MyHome');
}
显示当前应用的MyHome.html
public function index(){

$this->fetch('MyHome.tpl');
}
显示当前应用的MyHome.tpl
public function index(){

$this->fetch('Home/index');
}
显示当前应用的Home控制器的index(跨控制器)

主题化:
public function index(){

$this->fetch('@default/index');
}
显示view/default/当前控制器(自动获取)/index.html
public function index(){

$this->fetch('@default/Home/index');
}
显示view/default/home(可跨控制器)/index.html。
更新包已经准备好,后台一键更新即可!
另外:如果有使用万能表单应用,报模板不存在的,重新下载上传即可!

rhaphp万能表单应用插件

应用&插件geeson 发表了文章 • 0 个评论 • 2884 次浏览 • 2017-12-28 13:10 • 来自相关话题

请把RhaPHP更新到1.2.5最新版本,然后上传到addon目录,后台安装点击安装应用即可使用。










数据界面










可以扫描菜单进入测试 查看全部
请把RhaPHP更新到1.2.5最新版本,然后上传到addon目录,后台安装点击安装应用即可使用。

IMG_4104.PNG


IMG_4105.PNG

数据界面

火狐截图_2017-12-28T05-54-39.562Z_.png


rhaphp_qrcode.jpg

可以扫描菜单进入测试

安装数据库等了半天,没反应

回复

提问日破云涛万里红 发起了问题 • 1 人关注 • 0 个回复 • 1053 次浏览 • 2017-12-09 18:38 • 来自相关话题

关于使用公众平台选择安全模式下接入说明

分享geeson 发表了文章 • 0 个评论 • 1347 次浏览 • 2017-12-07 14:15 • 来自相关话题

        在rhaphp开发之初,已经想到默认上要支持安全模式的,但大家放心,选择明文模式也是没有什么大碍的。比较多的平台都是选择明文模式的,所以在rhaphp1.2.2版本是没有支持到安全模式接入,是因为想到 PHP7已经流行。
在rhaphp下一个版本中默认是支持安全模式的,但是需要说明一点的是:在微信官方提供对消息的解密是使用mcrypt 扩展的,而且这个扩展在 PHP7.1已经失效的了。PHP官方说明:http://php.net/manual/zh/migration71.deprecated.php
mcrypt 扩展已经过时了大约10年,并且用起来很复杂。因此它被废弃并且被 OpenSSL 所取代。 从PHP 7.2起它将被从核心代码中移除并且移到PECL中。
在 rhaphp发布1.2.3版本后,是默认支持安全模式的,如果你的 PHP版本是5.5-7.0之间,是可以使用选择安全模式的。如果在 PHP7.1以上的就需要安装OpenSSL扩展并且代替mcrypt加密与解密的函数。在rhaphp系统中使用的 PHPSDK 我们会一直更新的。并且还要说明一点:这并不是rhaphp的缺憾,如果你的环境是满足的那么可以忽略此文。 查看全部
        在rhaphp开发之初,已经想到默认上要支持安全模式的,但大家放心,选择明文模式也是没有什么大碍的。比较多的平台都是选择明文模式的,所以在rhaphp1.2.2版本是没有支持到安全模式接入,是因为想到 PHP7已经流行。
在rhaphp下一个版本中默认是支持安全模式的,但是需要说明一点的是:在微信官方提供对消息的解密是使用mcrypt 扩展的,而且这个扩展在 PHP7.1已经失效的了。PHP官方说明:http://php.net/manual/zh/migration71.deprecated.php
mcrypt 扩展已经过时了大约10年,并且用起来很复杂。因此它被废弃并且被 OpenSSL 所取代。 从PHP 7.2起它将被从核心代码中移除并且移到PECL中。
在 rhaphp发布1.2.3版本后,是默认支持安全模式的,如果你的 PHP版本是5.5-7.0之间,是可以使用选择安全模式的。如果在 PHP7.1以上的就需要安装OpenSSL扩展并且代替mcrypt加密与解密的函数。在rhaphp系统中使用的 PHPSDK 我们会一直更新的。并且还要说明一点:这并不是rhaphp的缺憾,如果你的环境是满足的那么可以忽略此文。

2017-11-23 rhaphp发布1.2.2新版本

回复

公告geeson 发起了问题 • 2 人关注 • 0 个回复 • 1094 次浏览 • 2017-11-23 15:46 • 来自相关话题

RhaPHP已经上传至码云

回复

公告geeson 发起了问题 • 1 人关注 • 0 个回复 • 1093 次浏览 • 2017-10-31 18:05 • 来自相关话题

2017-10-18 rhaphp更新通知

回复

公告geeson 发起了问题 • 1 人关注 • 0 个回复 • 1077 次浏览 • 2017-10-18 14:18 • 来自相关话题

sendCustomMessage( )发送客服消息

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

/**
* @RhaPHP.com geeson
* 发送客服消息
* @param array $data 消息结构{"touser":"OPENID","msgtype":"news","news":{...}}
* @return boolean|array
*/
function sendCustomMessage($data = [])
{
$wxObj = getWechatActiveObj();
$result = $wxObj->sendCustomMessage($data);
if (empty($result)) {
if ($wxObj->errCode == '45015') {
return ['errcode' => -1, 'errmsg' => '发送失败:此用户48小时内没有与公众号有过互动'];
}
return ['errcode' => -1, 'errmsg' => ' errCode:' . $wxObj->errCode . ' errMsg:' . $wxObj->errMsg];

}
if (!isset($result['errcode']) && $result['errcode'] != '0') {
return ['errcode' => -1, 'errmsg' => ' errCode:' . $wxObj->errCode . ' errMsg:' . $wxObj->errMsg];
} else {
return $result;
}
} 查看全部
/**
* @RhaPHP.com geeson
* 发送客服消息
* @param array $data 消息结构{"touser":"OPENID","msgtype":"news","news":{...}}
* @return boolean|array
*/
function sendCustomMessage($data = [])
{
$wxObj = getWechatActiveObj();
$result = $wxObj->sendCustomMessage($data);
if (empty($result)) {
if ($wxObj->errCode == '45015') {
return ['errcode' => -1, 'errmsg' => '发送失败:此用户48小时内没有与公众号有过互动'];
}
return ['errcode' => -1, 'errmsg' => ' errCode:' . $wxObj->errCode . ' errMsg:' . $wxObj->errMsg];

}
if (!isset($result['errcode']) && $result['errcode'] != '0') {
return ['errcode' => -1, 'errmsg' => ' errCode:' . $wxObj->errCode . ' errMsg:' . $wxObj->errMsg];
} else {
return $result;
}
}

qiniuUpload( )七牛上传函数

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

/**
* @param string $mid 公众号标识
* @param string $file 上传文件物理路径
* @param string $key 保护七牛中的文件名
* @return array
*/
function qiniuUpload($mid='',$file='',$key=''){
if(!$mid){
return ['code'=>1,'msg'=>'公众号标识mid不能为空'];
}else{
$st=getSetting($mid,'cloud');
if(!isset($st['qiniu']) && empty($st['qiniu'])){
return ['code'=>1,'msg'=>'请先配置七牛云存储参数'];
}else{
\think\Loader::import('QiniuSdk.Qiniu.autoload', EXTEND_PATH, '.php');

$client =Qiniu\Qiniu::create(array(
'access_key' => $st['qiniu']['accessKey'],
'secret_key' => $st['qiniu']['secretKey'],
'bucket' => $st['qiniu']['bucke'],
'domain' => $st['qiniu']['domain']
));
$result=$client->uploadFile($file,$key);
$result=json_decode(json_encode($result),true);
if(isset($result['response']['code']) && $result['response']['code'] !='200'){
return ['code'=>1,'msg'=>$result['error']];
}else{
return $res = [
'code' => 0,
'data' => [
'src' => $result['data']['url']
]
];
}
}
}

} 查看全部
/**
* @param string $mid 公众号标识
* @param string $file 上传文件物理路径
* @param string $key 保护七牛中的文件名
* @return array
*/
function qiniuUpload($mid='',$file='',$key=''){
if(!$mid){
return ['code'=>1,'msg'=>'公众号标识mid不能为空'];
}else{
$st=getSetting($mid,'cloud');
if(!isset($st['qiniu']) && empty($st['qiniu'])){
return ['code'=>1,'msg'=>'请先配置七牛云存储参数'];
}else{
\think\Loader::import('QiniuSdk.Qiniu.autoload', EXTEND_PATH, '.php');

$client =Qiniu\Qiniu::create(array(
'access_key' => $st['qiniu']['accessKey'],
'secret_key' => $st['qiniu']['secretKey'],
'bucket' => $st['qiniu']['bucke'],
'domain' => $st['qiniu']['domain']
));
$result=$client->uploadFile($file,$key);
$result=json_decode(json_encode($result),true);
if(isset($result['response']['code']) && $result['response']['code'] !='200'){
return ['code'=>1,'msg'=>$result['error']];
}else{
return $res = [
'code' => 0,
'data' => [
'src' => $result['data']['url']
]
];
}
}
}

}

sendRedpack( )微信现金红包函数

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

/**
* 现金红包
* 微信规定红包最小金额为1元
* 本函数输参数金额为元
* @param string $mid
* @param array $param
* @return array
*/
function sendRedpack($mid = '', $param = [], $addon = '')
{

if (setWxpayConfig($mid)) {
$url = "https://api.mch.weixin.qq.com/ ... 3B%3B
echo $order_number = time() . rand_string(18, 1);
$redpackObj = new Redpack();
$redpackObj->setParments("re_openid", isset($param['openid']) ? $param['openid'] : '');//openid
$redpackObj->setParments("mch_billno", $order_number);//订单号
$redpackObj->setParments("nick_name", isset($param['nick_name']) ? $param['nick_name'] : '有钱任性');//提供方名称|必填
$redpackObj->setParments("send_name", isset($param['send_name']) ? $param['send_name'] : '有钱的二狗子');//红包发送者名称|必填
$redpackObj->setParments("total_amount", isset($param['money']) ? $param['money'] * 100 : '');//付款金额,单位:元、元、元、|必填
$redpackObj->setParments("min_value", isset($param['min_value']) ? $param['min_value'] : '100');//最小红包金额,单位分
$redpackObj->setParments("max_value", isset($param['max_value']) ? $param['max_value'] : '100');//最大红包金额,单位分
$redpackObj->setParments("total_num", isset($param['total_num']) ? $param['total_num'] : '1');//红包収放总人数
$redpackObj->setParments("wishing", isset($param['wishing']) ? $param['wishing'] : '恭喜发财');//红包祝福诧
$redpackObj->setParments("client_ip", \think\Request::instance()->ip());//调用接口的机器 Ip 地址
$redpackObj->setParments("act_name", isset($param['act_name']) ? $param['act_name'] : '红包活动');//活动名称
$redpackObj->setParments("remark", isset($param['remark']) ? $param['remark'] : '红包活动');//备注信息
$redpackObj->setParments("nonce_str", getRandChar(32));//备注信息
$xml = $redpackObj->createRedpackXml();
$result = $redpackObj->xmlToArray($redpackObj->postXmlCurl($xml, $url, true));
$sslcert = ROOT_PATH . 'data/' . $mid . '_' . '_apiclient_cert.pem';
$sslkey = ROOT_PATH . 'data/' . $mid . '_' . '_apiclient_key.pem';
if (isset($result['result_code']) && $result['result_code'] == 'SUCCESS') {
unlink($sslcert);
unlink($sslkey);
$model = new \app\common\model\Redpack();
$param['order_number'] = $order_number;
$param['mpid'] = $mid;
$param['create_time'] = time();
$param['addon'] = $addon;
$model->allowField(true)->save($param);
$param['errCode'] = 0;
$param['errMsg'] = '发放成功';
return $param;
} else {
unlink($sslcert);
unlink($sslkey);
return ['errCode' => -1, 'errMsg' => 'errMsg:' . $result['result_code'] . ':' . $result['return_msg']];
}
}else{
return ['errCode' => -1, 'errMsg' => 'errMsg:该公众号还没有配置支付相关的参数'];
}
} 查看全部
/**
* 现金红包
* 微信规定红包最小金额为1元
* 本函数输参数金额为元
* @param string $mid
* @param array $param
* @return array
*/
function sendRedpack($mid = '', $param = [], $addon = '')
{

if (setWxpayConfig($mid)) {
$url = "https://api.mch.weixin.qq.com/ ... 3B%3B
echo $order_number = time() . rand_string(18, 1);
$redpackObj = new Redpack();
$redpackObj->setParments("re_openid", isset($param['openid']) ? $param['openid'] : '');//openid
$redpackObj->setParments("mch_billno", $order_number);//订单号
$redpackObj->setParments("nick_name", isset($param['nick_name']) ? $param['nick_name'] : '有钱任性');//提供方名称|必填
$redpackObj->setParments("send_name", isset($param['send_name']) ? $param['send_name'] : '有钱的二狗子');//红包发送者名称|必填
$redpackObj->setParments("total_amount", isset($param['money']) ? $param['money'] * 100 : '');//付款金额,单位:元、元、元、|必填
$redpackObj->setParments("min_value", isset($param['min_value']) ? $param['min_value'] : '100');//最小红包金额,单位分
$redpackObj->setParments("max_value", isset($param['max_value']) ? $param['max_value'] : '100');//最大红包金额,单位分
$redpackObj->setParments("total_num", isset($param['total_num']) ? $param['total_num'] : '1');//红包収放总人数
$redpackObj->setParments("wishing", isset($param['wishing']) ? $param['wishing'] : '恭喜发财');//红包祝福诧
$redpackObj->setParments("client_ip", \think\Request::instance()->ip());//调用接口的机器 Ip 地址
$redpackObj->setParments("act_name", isset($param['act_name']) ? $param['act_name'] : '红包活动');//活动名称
$redpackObj->setParments("remark", isset($param['remark']) ? $param['remark'] : '红包活动');//备注信息
$redpackObj->setParments("nonce_str", getRandChar(32));//备注信息
$xml = $redpackObj->createRedpackXml();
$result = $redpackObj->xmlToArray($redpackObj->postXmlCurl($xml, $url, true));
$sslcert = ROOT_PATH . 'data/' . $mid . '_' . '_apiclient_cert.pem';
$sslkey = ROOT_PATH . 'data/' . $mid . '_' . '_apiclient_key.pem';
if (isset($result['result_code']) && $result['result_code'] == 'SUCCESS') {
unlink($sslcert);
unlink($sslkey);
$model = new \app\common\model\Redpack();
$param['order_number'] = $order_number;
$param['mpid'] = $mid;
$param['create_time'] = time();
$param['addon'] = $addon;
$model->allowField(true)->save($param);
$param['errCode'] = 0;
$param['errMsg'] = '发放成功';
return $param;
} else {
unlink($sslcert);
unlink($sslkey);
return ['errCode' => -1, 'errMsg' => 'errMsg:' . $result['result_code'] . ':' . $result['return_msg']];
}
}else{
return ['errCode' => -1, 'errMsg' => 'errMsg:该公众号还没有配置支付相关的参数'];
}
}

queryOrder( )订单状态查询

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

/**
* @param string $order_number 订单号
* @return array errCode ok: 成功 -1:失败
*/
function queryOrder($order_number = '')
{
$paymentModel = new \app\common\model\Payment();
if (!$payment = $paymentModel->getPaymentByFind(['order_number' => $order_number])) {
return ['errCode' => -1, 'errMsg' => '订单不存在'];
}
if (setWxpayConfig($payment['mpid'])) {
$input = new \WxPayOrderQuery();
$input->SetOut_trade_no($order_number);
$orderRes = \WxPayApi::orderQuery($input);
if (!empty($orderRes)) {
if (isset($orderRes['trade_state']) && $orderRes['trade_state'] == 'SUCCESS') {//已经支付
if ($payment['status'] == '0') {//订单状态未处理为成功
$model = new \app\common\model\MemberWealthRecord();
if ($model->addMoney($payment['member_id'], $payment['mpid'], $payment['money'], $payment['title'])) {
if (!$paymentModel->save(['status' => 1], ['order_number' => $order_number])) {
return ['errCode' => -1, 'errMsg' => '改变订单状态失败'];
}
return ['errCode' => 'ok', 'errMsg' => '交易完成'];
} else {
return ['errCode' => -1, 'errMsg' => '改变账户金额失败'];
}
} else {
return ['errCode' => 'ok', 'errMsg' => '交易完成'];
}
} else {
return ['errCode' => -1, 'errMsg' => '未完成交易'];
}
} else {
return ['errCode' => -1, 'errMsg' => '订单不存在'];
}
}
return ['errCode' => -1, 'errMsg' => '没有公众号配置信息'];
} 查看全部
/**
* @param string $order_number 订单号
* @return array errCode ok: 成功 -1:失败
*/
function queryOrder($order_number = '')
{
$paymentModel = new \app\common\model\Payment();
if (!$payment = $paymentModel->getPaymentByFind(['order_number' => $order_number])) {
return ['errCode' => -1, 'errMsg' => '订单不存在'];
}
if (setWxpayConfig($payment['mpid'])) {
$input = new \WxPayOrderQuery();
$input->SetOut_trade_no($order_number);
$orderRes = \WxPayApi::orderQuery($input);
if (!empty($orderRes)) {
if (isset($orderRes['trade_state']) && $orderRes['trade_state'] == 'SUCCESS') {//已经支付
if ($payment['status'] == '0') {//订单状态未处理为成功
$model = new \app\common\model\MemberWealthRecord();
if ($model->addMoney($payment['member_id'], $payment['mpid'], $payment['money'], $payment['title'])) {
if (!$paymentModel->save(['status' => 1], ['order_number' => $order_number])) {
return ['errCode' => -1, 'errMsg' => '改变订单状态失败'];
}
return ['errCode' => 'ok', 'errMsg' => '交易完成'];
} else {
return ['errCode' => -1, 'errMsg' => '改变账户金额失败'];
}
} else {
return ['errCode' => 'ok', 'errMsg' => '交易完成'];
}
} else {
return ['errCode' => -1, 'errMsg' => '未完成交易'];
}
} else {
return ['errCode' => -1, 'errMsg' => '订单不存在'];
}
}
return ['errCode' => -1, 'errMsg' => '没有公众号配置信息'];
}

wxPayByJsApi( )微信支付函数

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

/**
* 微信支付函数
* @param $parment_id 定单id
* @param int $money
* @param string $openid
* @param string $mid 必须
* @param string $notifyUrl 通知地址
* @param string $body 商品描述
* @param string $goods_tag 订单优惠标记
* @param string $attach 附加数据
* @param string $trade_type 交易类型
* @return bool|json数据,可直接填入js函数作为参数
*/
function wxPayByJsApi($parment_id = '', $goods_tag = '', $trade_type = 'JSAPI')
{
$model = new \app\common\model\Payment();
if (!$payment = $model->getPaymentByFind(['payment_id' => $parment_id])) {
return ['errCode' => -1, 'errMsg' => '订单不存在'];
}
if (setWxpayConfig($payment['mpid'])) {
$tools = new \JsApiPay();
$input = new \WxPayUnifiedOrder();
$input->SetBody($payment['title']);
$input->SetAttach($payment['attach']);
$input->SetOut_trade_no($payment['order_number']);
$input->SetTotal_fee($payment['money'] * 100);
$input->SetTime_start(date("YmdHis"));//交易起始时间
$input->SetTime_expire(date("YmdHis", time() + 86400));//交易结束时间
$input->SetGoods_tag($goods_tag);
$input->SetNotify_url(\wxPayConfig::$NOTIFY_URL);
$input->SetTrade_type($trade_type);
$input->SetOpenid($payment['openid']);
$order = \WxPayApi::unifiedOrder($input);
if (isset($order['return_code'])) {
if ($order['return_code'] == 'SUCCESS') {
$jsApiParameters = $tools->GetJsApiParameters($order);
if ($jsApiParameters == false) {
return ['errCode' => -1, 'errMsg' => '获取API参数失败'];
} else {
return ['errCode' => 'ok', 'data' => $jsApiParameters];
}
} else {
return ['errCode' => -1, 'errMsg' => $order['return_code'] . $order['return_msg']];
}
}
}
return ['errCode' => -1, 'errMsg' => '没有公众号配置信息'];
} 查看全部
/**
* 微信支付函数
* @param $parment_id 定单id
* @param int $money
* @param string $openid
* @param string $mid 必须
* @param string $notifyUrl 通知地址
* @param string $body 商品描述
* @param string $goods_tag 订单优惠标记
* @param string $attach 附加数据
* @param string $trade_type 交易类型
* @return bool|json数据,可直接填入js函数作为参数
*/
function wxPayByJsApi($parment_id = '', $goods_tag = '', $trade_type = 'JSAPI')
{
$model = new \app\common\model\Payment();
if (!$payment = $model->getPaymentByFind(['payment_id' => $parment_id])) {
return ['errCode' => -1, 'errMsg' => '订单不存在'];
}
if (setWxpayConfig($payment['mpid'])) {
$tools = new \JsApiPay();
$input = new \WxPayUnifiedOrder();
$input->SetBody($payment['title']);
$input->SetAttach($payment['attach']);
$input->SetOut_trade_no($payment['order_number']);
$input->SetTotal_fee($payment['money'] * 100);
$input->SetTime_start(date("YmdHis"));//交易起始时间
$input->SetTime_expire(date("YmdHis", time() + 86400));//交易结束时间
$input->SetGoods_tag($goods_tag);
$input->SetNotify_url(\wxPayConfig::$NOTIFY_URL);
$input->SetTrade_type($trade_type);
$input->SetOpenid($payment['openid']);
$order = \WxPayApi::unifiedOrder($input);
if (isset($order['return_code'])) {
if ($order['return_code'] == 'SUCCESS') {
$jsApiParameters = $tools->GetJsApiParameters($order);
if ($jsApiParameters == false) {
return ['errCode' => -1, 'errMsg' => '获取API参数失败'];
} else {
return ['errCode' => 'ok', 'data' => $jsApiParameters];
}
} else {
return ['errCode' => -1, 'errMsg' => $order['return_code'] . $order['return_msg']];
}
}
}
return ['errCode' => -1, 'errMsg' => '没有公众号配置信息'];
}

getMember( )获取会员信息

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

/**
* 获取会员(应用如需要使用会员登录,请使用本函数获取会员)
* 请区别 函数 getMemberInfo
* @return bool|mixed
*/
function getMember($member_id = '')
{
$friendModel = new \app\common\model\MpFriends();
if ($member_id) {
$member = $friendModel->getMemberInfo(['id' => $member_id]);
} else {
if (!$mid = input('mid')) {
exit('公众号标识mid不存在');
}
$c = cookie('member_' . $mid) ? cookie('member_' . $mid) : [];
$s = session('member_' . $mid) ? session('member_' . $mid) : [];
$member = array_merge($c, $s);
}
if (!empty($member)) {
$group = \think\Db::name('member_group')->where(['mpid' => $member['mpid']])->order('up_score ASC,up_money ASC,discount ASC')->select();
$group_id = '0';
$group_name = '';
if (!empty($group)) {
$model = new \app\common\model\MemberWealthRecord();
$score = $model->getMemberScoreBySum($member['id'], $member['mpid']);
$money = $model->getMemberMoneyBySum($member['id'], $member['mpid']);

foreach ($group as $key => $val) {
if ($val['up_type'] == '0') {
if ($score > $val['up_score'] || $money > $val['up_money']) {
$group_id = $val['gid'];
$group_name = $val['group_name'];
}
} elseif ($val['up_type'] == '1') {
if ($score > $val['up_score'] && $money > $val['up_money']) {
$group_id = $val['gid'];
$group_name = $val['group_name'];
}
}
}
$friendModel->updateMember(['id' => $member['id']], ['group_id' => $group_id]);
}
$member = $friendModel->getMemberInfo(['id' => $member['id']]);//可能COOKIE SESSION缓存原因 重新获取最新会员数据
if (!empty($member)) {
$group = \think\Db::name('member_group')->where(['gid' => $member['group_id']])->field('gid,group_name,discount')->find();
if (!empty($group)) {
$member['gid'] = $group['gid'];
$member['group_name'] = $group['group_name'];
$member['discount'] = $group['discount'];
} else {
$member['gid'] = '';
$member['group_name'] = '';
$member['discount'] = '';
}
return json_decode(json_encode($member), true);
} else {
//考虑没有认证号获取基本信息
return false;
}
} else {
return false;
}
} 查看全部
/**
* 获取会员(应用如需要使用会员登录,请使用本函数获取会员)
* 请区别 函数 getMemberInfo
* @return bool|mixed
*/
function getMember($member_id = '')
{
$friendModel = new \app\common\model\MpFriends();
if ($member_id) {
$member = $friendModel->getMemberInfo(['id' => $member_id]);
} else {
if (!$mid = input('mid')) {
exit('公众号标识mid不存在');
}
$c = cookie('member_' . $mid) ? cookie('member_' . $mid) : [];
$s = session('member_' . $mid) ? session('member_' . $mid) : [];
$member = array_merge($c, $s);
}
if (!empty($member)) {
$group = \think\Db::name('member_group')->where(['mpid' => $member['mpid']])->order('up_score ASC,up_money ASC,discount ASC')->select();
$group_id = '0';
$group_name = '';
if (!empty($group)) {
$model = new \app\common\model\MemberWealthRecord();
$score = $model->getMemberScoreBySum($member['id'], $member['mpid']);
$money = $model->getMemberMoneyBySum($member['id'], $member['mpid']);

foreach ($group as $key => $val) {
if ($val['up_type'] == '0') {
if ($score > $val['up_score'] || $money > $val['up_money']) {
$group_id = $val['gid'];
$group_name = $val['group_name'];
}
} elseif ($val['up_type'] == '1') {
if ($score > $val['up_score'] && $money > $val['up_money']) {
$group_id = $val['gid'];
$group_name = $val['group_name'];
}
}
}
$friendModel->updateMember(['id' => $member['id']], ['group_id' => $group_id]);
}
$member = $friendModel->getMemberInfo(['id' => $member['id']]);//可能COOKIE SESSION缓存原因 重新获取最新会员数据
if (!empty($member)) {
$group = \think\Db::name('member_group')->where(['gid' => $member['group_id']])->field('gid,group_name,discount')->find();
if (!empty($group)) {
$member['gid'] = $group['gid'];
$member['group_name'] = $group['group_name'];
$member['discount'] = $group['discount'];
} else {
$member['gid'] = '';
$member['group_name'] = '';
$member['discount'] = '';
}
return json_decode(json_encode($member), true);
} else {
//考虑没有认证号获取基本信息
return false;
}
} else {
return false;
}
}

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

文档教程geeson 发表了文章 • 0 个评论 • 791 次浏览 • 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 个评论 • 1319 次浏览 • 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 个评论 • 1155 次浏览 • 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 个评论 • 1205 次浏览 • 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);
}