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

2017-11-9:rhaphp版本更新

公告意犹未尽 回复了问题 • 2 人关注 • 1 个回复 • 645 次浏览 • 2017-11-10 11:33 • 来自相关话题

多个公众号时,发布菜单报错 ​40016 invalid button size hint

反馈geeson 回复了问题 • 2 人关注 • 1 个回复 • 901 次浏览 • 2017-11-09 09:22 • 来自相关话题

WIN10系统,安装报错

提问geeson 回复了问题 • 2 人关注 • 2 个回复 • 669 次浏览 • 2017-11-08 14:19 • 来自相关话题

增加公众号没反应

提问geeson 回复了问题 • 2 人关注 • 1 个回复 • 690 次浏览 • 2017-11-08 11:37 • 来自相关话题

按教程在根目录增加了web.config 可是打不开了

提问geeson 回复了问题 • 2 人关注 • 2 个回复 • 438 次浏览 • 2017-11-07 16:15 • 来自相关话题

安装完成后登录后台输入用户名和密码后没有任何提示

提问jiangshan 回复了问题 • 5 人关注 • 5 个回复 • 1200 次浏览 • 2017-11-06 14:40 • 来自相关话题

请问有新手教程?

提问geeson 回复了问题 • 2 人关注 • 1 个回复 • 506 次浏览 • 2017-11-05 12:43 • 来自相关话题

发布菜单时错误提示

提问geeson 回复了问题 • 2 人关注 • 1 个回复 • 567 次浏览 • 2017-11-05 12:41 • 来自相关话题

测试了两天有个问题啊 求解答

提问geeson 回复了问题 • 2 人关注 • 3 个回复 • 517 次浏览 • 2017-11-02 10:29 • 来自相关话题

根目录指向哪里啊?public里面吗 还是网站根目录里面,都不行啊

提问kiti 回复了问题 • 3 人关注 • 2 个回复 • 495 次浏览 • 2017-11-01 14:39 • 来自相关话题

研究了两天的感想与一些建议

反馈geeson 回复了问题 • 2 人关注 • 1 个回复 • 619 次浏览 • 2017-11-01 14:22 • 来自相关话题

win7本地化安装 参数填写完成后【下一步】没有任何反应。。。什么原因?

提问linwh0814 回复了问题 • 3 人关注 • 3 个回复 • 663 次浏览 • 2017-11-01 10:52 • 来自相关话题

RhaPHP已经上传至码云

回复

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

是否可以二开三级分销

提问geeson 回复了问题 • 2 人关注 • 1 个回复 • 666 次浏览 • 2017-10-31 16:40 • 来自相关话题

阿里云虚拟主机安装不成功

提问geeson 回复了问题 • 2 人关注 • 2 个回复 • 824 次浏览 • 2017-10-31 10:47 • 来自相关话题

本地安装提示模块不存在是什么原因?

提问geeson 回复了问题 • 2 人关注 • 1 个回复 • 593 次浏览 • 2017-10-31 10:44 • 来自相关话题

rhaphp_v1.0正式版发布

公告geeson 发表了文章 • 4 个评论 • 943 次浏览 • 2017-10-29 16:31 • 来自相关话题

         我没有华丽语言,也没有什么漂亮的姿势来说明这款产品。我只知道花了很长时间写代码,也重构了好几个版本,(这样结构比较好,还是那样的结构比较好?在应用的开发上那个逻辑比较简单?各种改来改去。。。)目的只有一个,想做一个比较好用,灵活一些的,易上手的微信公众号管理与开发框架系统,今天终于可以分享给大家了。


















































  查看全部
         我没有华丽语言,也没有什么漂亮的姿势来说明这款产品。我只知道花了很长时间写代码,也重构了好几个版本,(这样结构比较好,还是那样的结构比较好?在应用的开发上那个逻辑比较简单?各种改来改去。。。)目的只有一个,想做一个比较好用,灵活一些的,易上手的微信公众号管理与开发框架系统,今天终于可以分享给大家了。

火狐截图_2017-10-24T08-37-02.153Z_.png


火狐截图_2017-10-25T02-47-46.811Z_.png


火狐截图_2017-10-25T02-48-52.068Z_.png


火狐截图_2017-10-25T02-51-17.377Z_.png


火狐截图_2017-10-25T04-47-37.628Z_.png


火狐截图_2017-10-25T05-11-00.533Z_.png


火狐截图_2017-10-29T05-07-21.616Z_.png


火狐截图_2017-10-29T05-08-01.936Z_.png


IMG_3684.PNG


IMG_3686.PNG

 

如何隐藏入口index.php,Apache,iis,Nginx配置

文档教程geeson 发表了文章 • 2 个评论 • 2503 次浏览 • 2017-10-29 13:51 • 来自相关话题

[ Apache ]

httpd.conf配置文件中加载了mod_rewrite.so模块(一般集成环境已经配置,可忽略)
AllowOverride None 将None改为 All
把下面的内容保存为.htaccess文件放到应用入口文件的同级目录下:<IfModule mod_rewrite.c>
Options +FollowSymlinks -Multiviews
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]
</IfModule>




[ IIS ]

如果你的服务器环境支持ISAPI_Rewrite的话,(iis6)可以配置httpd.ini文件,添加下面的内容:RewriteRule (.*)$ /index\.php\?s=$1

在IIS的高版本下面可以配置web.Config,在中间添加rewrite节点:<rewrite>
<rules>
<rule name="OrgPage" stopProcessing="true">
<match url="^(.*)$" />
<conditions logicalGrouping="MatchAll">
<add input="{HTTP_HOST}" pattern="^(.*)$" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="index.php/{R:1}" />
</rule>
</rules>
</rewrite>
 


[ Nginx ]


在Nginx低版本中,是不支持PATHINFO的,但是可以通过在Nginx.conf中配置转发规则实现:location / { // …..省略部分代码
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=/$1 last;
break;
}
} 查看全部


[ Apache ]


httpd.conf配置文件中加载了mod_rewrite.so模块(一般集成环境已经配置,可忽略)
AllowOverride None 将None改为 All
把下面的内容保存为.htaccess文件放到应用入口文件的同级目录下:
<IfModule mod_rewrite.c>
Options +FollowSymlinks -Multiviews
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]
</IfModule>




[ IIS ]


如果你的服务器环境支持ISAPI_Rewrite的话,(iis6)可以配置httpd.ini文件,添加下面的内容:
RewriteRule (.*)$ /index\.php\?s=$1 

在IIS的高版本下面可以配置web.Config,在中间添加rewrite节点:
<rewrite>
<rules>
<rule name="OrgPage" stopProcessing="true">
<match url="^(.*)$" />
<conditions logicalGrouping="MatchAll">
<add input="{HTTP_HOST}" pattern="^(.*)$" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="index.php/{R:1}" />
</rule>
</rules>
</rewrite>
 



[ Nginx ]



在Nginx低版本中,是不支持PATHINFO的,但是可以通过在Nginx.conf中配置转发规则实现:
location / { // …..省略部分代码
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=/$1 last;
break;
}
}

如何使用rhaphp快速开发微信支付应用?

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

在微信开发中,经常到会遇到微信支付与 JSSDK 的问题。可能几天都搞不定。相信大家都有遇到过吧?讲真的我第一次做支付就是这样的。那么现在福利来了。这些你都不用考虑了,只是几行代码就可以轻松实现。但是我也知道,最算什么好的事情,也是没有办法满足所有人。我已经做了一个微信支付的演示应用。这个应用功能不多作为演示与学习使用的。如果需要更多的功能,也可以自行开发。或者向在社区里提需求。那么先来看演示:(请下载附件后安装)















代码请你下载文章下的附件,如果你对应用开发还不熟悉的话,你可以花上几分钟看一下文档教程,也是快速上手的。

那么先来看代码,打开 chongZhi/controller/Deposit.php:public function topUp()
{

if (Request::instance()->isPost()) {
if ($member = getMember()) {
$money = input('post.money');
if (isset($member['openid']) && !empty($member['openid'])) {
if (empty($money) || $money < 0.09) {
ajaxMsg(0, '金额最小为0.1元');
} else {
$mid = $this->mid;
if (!$mid && $mid != $member['mpid']) {
ajaxMsg(0, '公众号标识与当前用户不匹配');
}
$model = new Payment();
if ($id = $model->addPayment($member['id'], $member['mpid'], $money, '账户充值')) {
ajaxReturn(['url' => getWxPayUrl($this->mid,['payment_id' => $id,'view'=>$this->addonRoot.'/view/common/pay.html'])]);
} else {
ajaxMsg(0, '下单失败');
}
}
} else {
ajaxMsg(0, '支付参数:openid不存在');
}
} else {
ajaxMsg(0, '用户不存在');
}
} else {
$this->assign('title', '账户充值');
$this->fetch();
}
}在以上的代码中,其实在微信支付上只有几行是重点的:$model = new Payment();
$id = $model->addPayment($member['id'], $member['mpid'], $money, '账户充值');
getWxPayUrl($this->mid,['payment_id' => $id,'view'=>$this->addonRoot.'/view/common/pay.html'])
解释一下:支付首先要有定单对吧,这个就不必多说了吧。$model->addPayment($member['id'], $member['mpid'], $money, '账户充值');        这里就是创建定单的,第一个参数就是会员 ID 号,第二个参数就是当前公众号的 ID 号。第三个就是金额了。如果是1元就填写1,一分就是0.1,经常抢红包的同学应该对这个0.1非常熟悉吧?第四个参数就是商品标题了。由于我这里是充值,那么我就写了账户充值了。如果你想知道更多的参数,看一下Payment模型。

      增加定单成功后这里会返回一个定单 ID 的。有了定单后那么就是跳转支付页面了。我这里是 AJAX 是所以我这里是返回JSON 返回前端 转跳了。getWxPayUrl()       这个函数主要解决了,微信支付授权目录的,意义重大。很多人都是遇到微信支付当前页面的URL未注册。这样的错误,其实就是支付目录错误。那么系统默认了:http://域名/service/payment/wxpay 。只要你把这个授权填写到微信官方支付后台。就可以了。
getWxPayUrl()第一个参数是公众号的 ID,第一个就是数组形式的。
['payment_id' => $id],payment_id是必须的。view如果你想自定的支付页面就填写你的模板路径。如果为空就是使用官方默认的支付页面的模板。这里相信比较多的同学还是满意这种灵活吧。

如果你在使用过程中,有任何问题,请在Rhaphp官方社区求助。必回! 查看全部
在微信开发中,经常到会遇到微信支付与 JSSDK 的问题。可能几天都搞不定。相信大家都有遇到过吧?讲真的我第一次做支付就是这样的。那么现在福利来了。这些你都不用考虑了,只是几行代码就可以轻松实现。但是我也知道,最算什么好的事情,也是没有办法满足所有人。我已经做了一个微信支付的演示应用。这个应用功能不多作为演示与学习使用的。如果需要更多的功能,也可以自行开发。或者向在社区里提需求。那么先来看演示:(请下载附件后安装)

1.png


1.png


1.png

代码请你下载文章下的附件,如果你对应用开发还不熟悉的话,你可以花上几分钟看一下文档教程,也是快速上手的。

那么先来看代码,打开 chongZhi/controller/Deposit.php:
public function topUp()
{

if (Request::instance()->isPost()) {
if ($member = getMember()) {
$money = input('post.money');
if (isset($member['openid']) && !empty($member['openid'])) {
if (empty($money) || $money < 0.09) {
ajaxMsg(0, '金额最小为0.1元');
} else {
$mid = $this->mid;
if (!$mid && $mid != $member['mpid']) {
ajaxMsg(0, '公众号标识与当前用户不匹配');
}
$model = new Payment();
if ($id = $model->addPayment($member['id'], $member['mpid'], $money, '账户充值')) {
ajaxReturn(['url' => getWxPayUrl($this->mid,['payment_id' => $id,'view'=>$this->addonRoot.'/view/common/pay.html'])]);
} else {
ajaxMsg(0, '下单失败');
}
}
} else {
ajaxMsg(0, '支付参数:openid不存在');
}
} else {
ajaxMsg(0, '用户不存在');
}
} else {
$this->assign('title', '账户充值');
$this->fetch();
}
}
在以上的代码中,其实在微信支付上只有几行是重点的:
$model = new Payment();
$id = $model->addPayment($member['id'], $member['mpid'], $money, '账户充值');
getWxPayUrl($this->mid,['payment_id' => $id,'view'=>$this->addonRoot.'/view/common/pay.html'])

解释一下:支付首先要有定单对吧,这个就不必多说了吧。
$model->addPayment($member['id'], $member['mpid'], $money, '账户充值');
        这里就是创建定单的,第一个参数就是会员 ID 号,第二个参数就是当前公众号的 ID 号。第三个就是金额了。如果是1元就填写1,一分就是0.1,经常抢红包的同学应该对这个0.1非常熟悉吧?第四个参数就是商品标题了。由于我这里是充值,那么我就写了账户充值了。如果你想知道更多的参数,看一下Payment模型。

      增加定单成功后这里会返回一个定单 ID 的。有了定单后那么就是跳转支付页面了。我这里是 AJAX 是所以我这里是返回JSON 返回前端 转跳了。
getWxPayUrl()
       这个函数主要解决了,微信支付授权目录的,意义重大。很多人都是遇到微信支付当前页面的URL未注册。这样的错误,其实就是支付目录错误。那么系统默认了:http://域名/service/payment/wxpay 。只要你把这个授权填写到微信官方支付后台。就可以了。
getWxPayUrl()第一个参数是公众号的 ID,第一个就是数组形式的。
['payment_id' => $id],payment_id是必须的。view如果你想自定的支付页面就填写你的模板路径。如果为空就是使用官方默认的支付页面的模板。这里相信比较多的同学还是满意这种灵活吧。

如果你在使用过程中,有任何问题,请在Rhaphp官方社区求助。必回!

2017-10-18 rhaphp更新通知

回复

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

sendCustomMessage( )发送客服消息

文档教程geeson 发表了文章 • 0 个评论 • 2043 次浏览 • 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 个评论 • 1078 次浏览 • 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']
]
];
}
}
}

}

singleSmsByTx( )短信普通单发(腾讯短信)

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

/**
* 普通单发,明确指定内容,如果有多个签名,请在内容中以【】的方式添加到信息内容中,否则系统将使用默认签名
* @param int $type 短信类型,0 为普通短信,1 营销短信
* @param string $nationCode 国家码,如 86 为中国
* @param string $phoneNumber 不带国家码的手机号
* @param string $msg 信息内容,必须与申请的模板格式一致,否则将返回错误
* @param string $extend 扩展码,可填空串
* @param string $ext 服务端原样返回的参数,可填空串
* @return string json string { "result": xxxxx, "errmsg": "xxxxxx" ... },被省略的内容参见协议文档
*/
function singleSmsByTx($mid = '', $phoneNumber = '', $msg = '', $type = '0', $nationCode = '86', $extend = "", $ext = "")
{
\think\Loader::import('Qcloud.Sms.Loader', EXTEND_PATH, '.php');
if (!$conf = getSetting($mid, 'sms')) {
return false;//没有配置信息参数
}
$appid = isset($conf['txsms']['appid']) ? $conf['txsms']['appid'] : '';
$appkey = isset($conf['txsms']['appid']) ? $conf['txsms']['appid'] : '';
$singleSender = new \Qcloud\Sms\SmsSingleSender($appid, $appkey);
$result = $singleSender->send($type, $nationCode, $phoneNumber, $msg, "", "");
$rsp = json_decode($result);
return $rsp;

} 查看全部
/**
* 普通单发,明确指定内容,如果有多个签名,请在内容中以【】的方式添加到信息内容中,否则系统将使用默认签名
* @param int $type 短信类型,0 为普通短信,1 营销短信
* @param string $nationCode 国家码,如 86 为中国
* @param string $phoneNumber 不带国家码的手机号
* @param string $msg 信息内容,必须与申请的模板格式一致,否则将返回错误
* @param string $extend 扩展码,可填空串
* @param string $ext 服务端原样返回的参数,可填空串
* @return string json string { "result": xxxxx, "errmsg": "xxxxxx" ... },被省略的内容参见协议文档
*/
function singleSmsByTx($mid = '', $phoneNumber = '', $msg = '', $type = '0', $nationCode = '86', $extend = "", $ext = "")
{
\think\Loader::import('Qcloud.Sms.Loader', EXTEND_PATH, '.php');
if (!$conf = getSetting($mid, 'sms')) {
return false;//没有配置信息参数
}
$appid = isset($conf['txsms']['appid']) ? $conf['txsms']['appid'] : '';
$appkey = isset($conf['txsms']['appid']) ? $conf['txsms']['appid'] : '';
$singleSender = new \Qcloud\Sms\SmsSingleSender($appid, $appkey);
$result = $singleSender->send($type, $nationCode, $phoneNumber, $msg, "", "");
$rsp = json_decode($result);
return $rsp;

}

sendRedpack( )微信现金红包函数

文档教程geeson 发表了文章 • 0 个评论 • 1085 次浏览 • 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 个评论 • 837 次浏览 • 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' => '没有公众号配置信息'];
}