Commit 52649cd2 authored by zhz's avatar zhz

Merge branch 'master_dev' of git.shenbd.com:qm-develop/shenbd into zhz

parents 4bac56c9 9ac1785f
......@@ -44,7 +44,7 @@ class CartController extends \Our\Controller_AbstractApi{
//获取购物车为空时的广告位
$advService = \Business\Common\AdvServiceModel::getInstance();
$emptyCartAdvs = $advService->getEmptyCartAdvs();
$cartList['advs'] = $emptyCartAdvs;
$cartList['advs'] = $emptyCartAdvs?$emptyCartAdvs:array();
$this->success($cartList);
}
......
......@@ -3,6 +3,7 @@
namespace Order;
use Our\ApiConst;
use Our\RedisHelper;
use Our\WechatCommon;
/**
......@@ -709,13 +710,16 @@ class OrderConfirmUtil {
\Error\ErrorModel::throwException(\Error\CodeConfigModel::failedUpdateFavoritesStoreForOrder);
}
$orderModel->db->doCommit();
$wechatCommon = WechatCommon::getInstance();
$access_token = $wechatCommon->getAccessToken();
//订单通过小程序表单提交过来
if($formId && ($access_token = $this->getLitAccesstoken())) {
if($formId && $access_token) {
$settingDAO = \DAO\SettingModel::getInstance();
$msg_tpl = $settingDAO->getListCache(array('wxapp_order_create_tpl'))['wxapp_order_create_tpl'];
$goods_str = '';
if(count($goods_datas)>1) {
$goods_str .= $goods_datas[0].'等' .count($goods_datas).'商品';
$goods_str .= $goods_datas[0].'等' .count($goods_datas).'商品';
} else {
$goods_str .= $goods_datas[0];
}
......@@ -724,98 +728,24 @@ class OrderConfirmUtil {
$openid = $authInfo['openid'];
$req_data = array('touser'=>$openid, 'template_id'=> $msg_tpl, 'form_id'=>$formId,
'page'=> 'pages/orders/list/index',
'page'=> 'pages/orders/detail/index?id=' . $orderId,
'data'=>array(
'keyword1'=>array('value'=>'下单成功'),
'keyword2'=>array('value'=>$order['order_sn']),
'keyword3'=>array('value'=>number_format($order['order_amount']/100, 2).'元'),
'keyword4'=>array('value'=>$order['store_name']),
'keyword5'=>array('value'=>$goods_str),
'keyword2'=>array('value'=> $order['order_sn']),
'keyword3'=>array('value'=> number_format($order['order_amount']/100, 2).'元'),
'keyword4'=>array('value'=> $order['store_name']),
'keyword5'=>array('value'=> $goods_str),
));
// \Our\Log::getInstance()->write(json_encode($req_data), '/data/log/apptest');
$url = 'https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=';
$result = $this->sendurl($url, $access_token, json_encode($req_data), 'post');
\Our\Log::getInstance()->write(var_export($result, true), '/data/log/apptest');
$json = $wechatCommon->sendTemplateMessage($access_token, $req_data);
// \Our\Log::getInstance()->write($json, '/data/log/apptest');
}
$this->opCacheInfo();
$this->pushMessage();
return array('needPayFlag'=>$needPayFlag,'paySn'=>$paySn);
}
/**
* 获取小程序表单
* User: King <358887571@qq.com>
* Date: 2018/12/27 0027
* Time: 下午 3:15
*/
private function getLitAccesstoken(){
$model_wx = \DAO\MbWxModel::getInstance();
$weixin = $model_wx->getOne('id,lit_appid,lit_appsecret,lit_accesstoken,lit_expirestime', 'id=1');
$access_token = '';
if (!$weixin['lit_expirestime'] || $weixin['lit_expirestime'] < time()) {
$access_info = json_decode(file_get_contents('https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' . $weixin['lit_appid'] . '&secret=' . $weixin['lit_appsecret']), true);
if (isset($access_info['access_token'])) {
$access_token = $access_info['access_token'];
$update_data = array();
$update_data['lit_accesstoken'] = $access_info['access_token'];
$update_data['lit_expirestime'] = TIMESTAMP + $access_info['expires_in'] - 1800;
$where = array('id' => $weixin['id']);
$result = $model_wx->update($update_data, $where);
}
} else {
$access_token = $weixin['lit_accesstoken'];
}
return $access_token;
}
/**
* curl请求
* @param $url
* @param $access_token
* @param $data
* @param $method
*/
private function sendurl($url, $access_token = '', $data = '', $method = 'get', $header = '') {
//
if(strtolower($method)=='post') {
$curl = curl_init();
curl_setopt($curl,CURLOPT_URL,$url.$access_token);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
} else {
$curl = curl_init($url.$access_token);
}
if($header){
//设置头部信息
curl_setopt($curl,CURLOPT_HTTPHEADER,$header);
}
//$curl = curl_init($url.$access_token);
curl_setopt($curl,CURLOPT_FAILONERROR,1);
//设置允许页面重定向
curl_setopt($curl,CURLOPT_FOLLOWLOCATION,1);
//设置返回值赋给变量
curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
//设置操作时间
curl_setopt($curl,CURLOPT_TIMEOUT,5);
if($method=='post'){
if(!$data) $data='';
// 使用post 请求
curl_setopt($curl,CURLOPT_POST,1);
// 设置请求参数
curl_setopt($curl,CURLOPT_POSTFIELDS,$data);
}
//开始事务
$r = curl_exec($curl);
curl_close($curl);
return $r;
}
public function pushMessage(){
if($this->pushMessageOrders){
$orderService=\Business\Order\OrderServiceModel::getInstance();
......
......@@ -76,10 +76,9 @@ class SmsTemplateConst{
),
//尊敬的${storename},您的店铺由于${reason}无法通过审核,请登录商户后台查看。
'storeCheckUnpass'=> array(
'templateId'=>'SMS_151547302',
'templateId'=>'SMS_154495028',
'parameters'=>array(
'storename',
'reason'
'storename'
)
),
//目前共有${storeCount}家商户注册待审核,${weiCount}家微信支付待处理状态(需结合微信服务商状态)。
......
......@@ -72,6 +72,21 @@ class WechatCommon
return $jsonstr;
}
/**
* 发送模板消息
*
* @param $access_token token
* @param $req_data 请求数据数组
* User: King <358887571@qq.com>
* Date: 2019/1/2 0002
* Time: 下午 4:41
*/
public function sendTemplateMessage($access_token, $req_data) {
$url = 'https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token='.$access_token;
$result = $this->httpsPostJson($url, $req_data, true);
return $result;
}
public function httpsPostJson($url, $data = '', $array = false)
{
......
......@@ -61,9 +61,9 @@ class WxLitePay extends \Payment\TencentPay{
public function refund($param){
if($param['subMchId']){
$this->refundService($param);
return $this->refundService($param);
}else{
$this->refundCommon($param);
return $this->refundCommon($param);
}
}
......
......@@ -328,7 +328,7 @@ class MemberServiceModel extends \Business\AbstractModel
return $result;
}
private function saveWxInfoMemberInfo($where,$openid=null){
private function saveWxInfoMemberInfo($where,$openid=null, $wxappopenid=null){
$memberDao = \DAO\MemberModel::getInstance(\Our\DbNameConst::masterDBConnectName);
//构造需要保存的会员信息
......@@ -336,6 +336,9 @@ class MemberServiceModel extends \Business\AbstractModel
if($openid){
$member['member_mobile'] = $openid;
}
if($wxappopenid) {
$member['member_wxappopenid'] = $wxappopenid;
}
$result = $memberDao->addInfo($member);
return $result;
}
......@@ -834,7 +837,7 @@ class MemberServiceModel extends \Business\AbstractModel
return false;
}
public function checkSaveWechatInfo($where){
public function checkSaveWechatInfo($where, $wxappopenid = ''){
$memberDao = \DAO\MemberModel::getInstance(\Our\DbNameConst::masterDBConnectName);
$memberMappingDao = \DAO\MemberMappingModel::getInstance(\Our\DbNameConst::masterDBConnectName);
if($where['userType'] == \Our\ApiConst::wechatUserType){
......@@ -851,7 +854,7 @@ class MemberServiceModel extends \Business\AbstractModel
//$memberMapping = \Our\RedisHelper::cachedFunction(\Redis\Db0\MemberMappingRedisModel::getInstance(),array(&$memberMappingDao, 'find'),array($condition,'member_id'),\Our\ApiConst::tenDaySecond);
if($memberMappings){
$memberIds = array_column($memberMappings,'member_id');
$member = $memberDao->getMemberForLogin($memberIds);
$member = $memberDao->getMemberForLogin($memberIds, $wxappopenid);
if($where['userType'] == \Our\ApiConst::wechatUserType){
$this->checkMemberMappingExistLogin($member['member_id'],$condition['openid'] ,$where['userType']);
}
......@@ -911,13 +914,14 @@ class MemberServiceModel extends \Business\AbstractModel
$where['session_key'] = $authInfo['session_key'];
$this->checkWechatInfo($where,$authInfo);
$returnMember = $this->checkSaveWechatInfo($where);
$returnMember = $this->checkSaveWechatInfo($where, $authInfo['openid']);
if($returnMember){
return $returnMember;
}
$db->doTransaction();
$openid = $this->getUnionId($where['encryptedData'],$where['iv'],$where['session_key']);
$memberId = $this->saveWxInfoMemberInfo($where,$openid);
$wxappOpenid = $authInfo['session_key'];
$memberId = $this->saveWxInfoMemberInfo($where, $openid, $wxappOpenid);
if(!$memberId){
$db->doRollback();
......
......@@ -21,7 +21,7 @@ class MemberModel extends \DAO\AbstractModel
protected $_tableName = 'han_member';
//有效用户返回数据
private $availMemberColumn = array('member_id', 'member_name', 'member_truename', 'member_avatar', 'member_sex', 'member_birthday', 'member_mobile', 'member_mobile_bind', 'member_qq', 'member_qqopenid', 'member_qqinfo', 'member_wxinfo', 'member_wxopenid', 'member_sinaopenid', 'member_sinainfo', 'member_points', 'member_state', 'member_quicklink', 'member_exppoints', 'store_id', 'iswx', 'agree_flag', 'seller_id', 'diliveryman_id', 'member_tag_ids', 'member_group_ids', 'is_teacher', 'member_email', 'member_email_bind','is_wxsend');
private $availMemberColumn = array('member_id', 'member_name', 'member_truename', 'member_avatar', 'member_sex', 'member_birthday', 'member_mobile', 'member_mobile_bind', 'member_qq', 'member_qqopenid', 'member_qqinfo', 'member_wxinfo', 'member_wxopenid', 'member_sinaopenid', 'member_sinainfo', 'member_points', 'member_state', 'member_quicklink', 'member_exppoints', 'store_id', 'iswx', 'agree_flag', 'seller_id', 'diliveryman_id', 'member_tag_ids', 'member_group_ids', 'is_teacher', 'member_email', 'member_email_bind', 'is_wxsend', 'member_wxappopenid');
//有效用户返回数据
......@@ -229,6 +229,7 @@ class MemberModel extends \DAO\AbstractModel
'memberMobileBind' => (int)$member['member_mobile_bind'],
'memberWxinfo' => isset($member['member_wxinfo'])&&$member['member_wxinfo']? unserialize($member['member_wxinfo']) : new \stdClass(),
'memberWxopenid' => $member['member_wxopenid'],
'memberWxappopenid' => $member['member_wxappopenid'],
'sellerId' => (int)$member['seller_id'],
'diliverymanId' => (int)$member['diliveryman_id'],
'storeId' => (int)$member['store_id'],
......@@ -251,6 +252,7 @@ class MemberModel extends \DAO\AbstractModel
'memberMobileBind' => $member['member_mobile_bind'],
'memberWxinfo' => isset($member['member_wxinfo']) ? unserialize($member['member_wxinfo']) : new \stdClass(),
'memberWxopenid' => $member['member_wxopenid'],
'memberWxappopenid' => $member['member_wxappopenid'],
'sellerId' => $member['seller_id'],
'diliverymanId' => $member['diliveryman_id'],
'storeId' => $member['store_id'],
......@@ -556,7 +558,16 @@ class MemberModel extends \DAO\AbstractModel
return $member;
}
public function getMemberForLogin($memberIds){
/**
* 获取登录用户
* @param $memberIds
* @param string $wxappopenid
* @return array
* User: King <358887571@qq.com>
* Date: 2018/12/29 0029
* Time: 下午 3:20
*/
public function getMemberForLogin($memberIds, $wxappopenid = ''){
$member = array();
$memberCon['member_id'] = array('in',$memberIds);
$memberCon['member_state'] = \Our\ApiConst::one;
......@@ -574,6 +585,10 @@ class MemberModel extends \DAO\AbstractModel
if(empty($member)){
$member = $memberList[0];
}
if($wxappopenid && !$member['member_wxappopenid']) {
$this->updateInfo(array('member_wxappopenid'=>$wxappopenid), array('member_id'=>$member['member_id']));
}
$member['member_wxappopenid'] = $wxappopenid;
$memberAvatarUrl = $this->getMemberAvatarUrl($member['member_id'], $member['member_avatar']);
$member['memberAvatarUrl'] = $memberAvatarUrl;
}
......
......@@ -49,12 +49,15 @@ class DiliverymanModel extends \DAO\AbstractModel
$data = $this->db->from($this->_tableName)->select($this->detailField)->where($where)->fetchOne();
return $data;
}
//任务脚本方法
public function getListByMemberId($memberId)
public function getListByMemberId($memberId,$isClient=false)
{
$this->setDb($this->dbName);
$where['member_id']=$memberId;
if(!$isClient){
$where['is_del']=ApiConst::zero;
}
$where = $this->db->getSqlWhereByArray($where);
$list = $this->db->select($this->detailField)->from($this->_tableName)->where($where)->fetchAll();
return $list;
......
......@@ -505,7 +505,6 @@ class RefundReturnModel extends \DAO\AbstractModel
} else if (intval($orderInfo['paymentType']) == ApiConst::wxProgram) {
$wxpay = \Payment\WxLitePay::getInstance();
$refund_return = $wxpay->refund($param);
if (!($refund_return['return_code'] == 'SUCCESS' && $refund_return['result_code'] == 'SUCCESS')) {
$this->errorMessage = date('Y-m-d') . '微信退款操作执行失败!' . $orderInfo['orderId'] . "\r\n";
return false;
......
<?php
//发布
$redis = new Redis();
$redis->connect('192.168.1.201', 6379);
$message='happy New Year';
$ret=$redis->publish('redisPublish',$message);
<?php
//订阅
ini_set('default_socket_timeout', -1); //不超时
$redis = new Redis();
$redis->connect('192.168.1.201', 6379);
$result=$redis->subscribe(array('pushcenter'), 'callback');
function printTest($meg){
$len=10;
for($i=0;$i<$len;$i++){
sleep(1);
echo $meg."\r\n";
}
}
function callback($instance,$channelName,$message){
printTest($message);
}
......@@ -41,9 +41,11 @@ class cliOrderSendTemplateMessage extends basecli
}
}
private function autoSendMessage(){
protected function autoSendMessage(){
$service = \Business\Order\OrderServiceModel::getInstance(\Our\DbNameConst::masterDBConnectName);
$service->baseDir = \Our\Common::getConfig('out.config');
echo "autoSendMessage:\n";
$service->sendTemplateMessage();
}
protected function _runCli()
......@@ -55,12 +57,13 @@ class cliOrderSendTemplateMessage extends basecli
echo "*** Debug mode ***\n";
}
// Step: 02 检查是否已有相同CLI在运行中
$lockDir=$this->_getBaseFileName('orderSendTemplateMessage');
$lockDir=$this->_getBaseFileName('order');
if(!$this->mkdirs($lockDir)){
echo '****create dir fail ****';
exit;
}
$this->lockFileName = $lockDir . '/orderSendTemplateMessage.locks';
@unlink($this->lockFileName);
if( file_exists( $this->lockFileName ) )
{
$stat = stat($this->lockFileName);
......@@ -84,7 +87,7 @@ class cliOrderSendTemplateMessage extends basecli
}
}
$oCli = new cliOrderConfirm(TRUE);
$oCli = new cliOrderSendTemplateMessage(TRUE);
EXIT;
?>
<?php
/**
*
* 推送10秒推送一次
*
* @author chenjiebin <sjlinyu@qq.com>
*/
define("APPLICATION_PATH", realpath(dirname(__FILE__) . '/../../../')); //指向public的上一级
require APPLICATION_PATH . '/scripts/crontab/baseCli.php';
require APPLICATION_PATH . '/scripts/crontab/common.php';
error_reporting(E_ALL ^ E_NOTICE);
// redis 没有设置密码
$conf = \Yaf\Registry::get('config')->get('redis.database.params');
$redis=new Redis();
$redis->connect($conf['host'], $conf['port']);
if(!empty($conf['password'])){
$redis->auth($conf['password']);
}
//ini_set('default_socket_timeout', -1);(所有长连接不超时)
$redis->setOption(Redis::OPT_READ_TIMEOUT, -1);
$result=$redis->subscribe(array('redisPublish'), 'callback');
function printTest($meg){
echo $meg.'213';
}
function callback($instance,$channelName,$message){
if($message=='outPid'){
$instance->unsubscribe(array($channelName));
return;
}
printTest($message);
}
<?php
define("APPLICATION_PATH", realpath(dirname(__FILE__) . '/../../../')); //指向public的上一级
require APPLICATION_PATH . '/scripts/crontab/baseCli.php';
require APPLICATION_PATH . '/scripts/crontab/common.php';
error_reporting(E_ALL ^ E_NOTICE);
class runRedisPush
{
/* config */
const LISTEN = "tcp://192.168.2.15:5555";
const MAXCONN = 100;
const pidfile = __CLASS__;
const uid = 80;
const gid = 80;
/**/
protected $pool = NULL;
protected $zmq = NULL;
public function __construct()
{
$this->pidfile = '/var/run/' . self::pidfile . '.pid';
}
private function daemon()
{
if (file_exists($this->pidfile)) {
echo "The file $this->pidfile exists.\n";
exit();
}
$pid = pcntl_fork();
if ($pid == -1) {
die('could not fork');
} else if ($pid) {
// we are the parent
//pcntl_wait($status); //Protect against Zombie children
exit($pid);
} else {
// we are the child
file_put_contents($this->pidfile, getmypid());
posix_setuid(self::uid);
posix_setgid(self::gid);
return (getmypid());
}
}
private function start()
{
$pid = $this->daemon();
$conf = \Yaf\Registry::get('config')->get('redis.database.params');
$redis=new Redis();
$redis->connect($conf['host'], $conf['port']);
if(!empty($conf['password'])){
$redis->auth($conf['password']);
}
//ini_set('default_socket_timeout', -1);(所有长连接不超时)
$redis->setOption(Redis::OPT_READ_TIMEOUT, -1);
$result=$redis->subscribe(array('redisPublish'), 'callback');
function printTest($meg){
echo $meg.'213';
}
function callback($instance,$channelName,$message){
printTest($message);
}
}
private function stop()
{
if (file_exists($this->pidfile)) {
$pid = file_get_contents($this->pidfile);
posix_kill($pid, 9);
unlink($this->pidfile);
}
}
private function help($proc)
{
printf("%s start | stop | help \n", $proc);
}
public function main($argv)
{
if (count($argv) < 2) {
printf("please input help parameter\n");
exit();
}
if ($argv[1] === 'stop') {
$this->stop();
} else if ($argv[1] === 'start') {
$this->start();
} else {
$this->help($argv[0]);
}
}
}
$cgse = new runRedisPush();
$cgse->main($argv);
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment