You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
152 lines
6.6 KiB
152 lines
6.6 KiB
<?php
|
|
class Pay{
|
|
static function createVipOrder(){
|
|
global $_W;
|
|
$activity = self::getSingleActive($id, '*');
|
|
$random = Util::createSalt();
|
|
$vipInfo = Util::getSingelData('*', PDO_NAME."member", array('uniacid'=>$_W['uniacid'],'mid'=>$_W['mid']));
|
|
$data = array(
|
|
'uid' =>$vipInfo['uid'],
|
|
'uniacid' => $_W['uniacid'],
|
|
'unionid' => $_W['unionid'],
|
|
'mid' => $_W['mid'],
|
|
'openid' => $_W['openid'],
|
|
'areaid' => $_W['areaid'],
|
|
'orderno' => "VIP_".createUniontid(),
|
|
'status' => 0,//订单状态:0未支,1支付,2待发货,3已发货,4已签收,5已取消,6待退款,7已退款
|
|
'createtime' => TIMESTAMP,
|
|
'price' => $activity['price']
|
|
);
|
|
pdo_insert(PDO_NAME.'vip_record',$data);
|
|
return pdo_insertid();
|
|
|
|
}
|
|
static function getCash($paytype,$orderno,$name,$price,$plugin,$done=''){
|
|
global $_W;
|
|
load()->func('communication');
|
|
$moduels = uni_modules();
|
|
$plugins = getAllPluginsName();
|
|
|
|
if(empty($orderno)) wl_message(array('errno'=>1,'message'=>"参数错误,缺少订单号.")); //验证是否缺失订单号。
|
|
|
|
|
|
|
|
if($price <= 0) wl_message(array('errno'=>1,'message'=>"支付金额错误,支付金额需大于0元."));//验证支付金额是否大于0。
|
|
|
|
$params['tid'] = $orderno;
|
|
$params['user'] = $_W['openid'];
|
|
$params['fee'] = $price;
|
|
$params['title'] = $name;
|
|
$params['ordersn'] = $orderno;
|
|
$params['module'] = MODULE_NAME;
|
|
$params['plugin'] = $plugin;
|
|
|
|
if(!array_key_exists($params['module'], $moduels)) wl_message('模块不存在.');//若模块不在微擎则报错。
|
|
if(!in_array($params['plugin'], $plugins)) wl_message('插件不存在.');//若模块不在微擎则报错。
|
|
|
|
$pars = array();
|
|
$pars['uniacid'] = $_W['uniacid'];
|
|
$pars['module'] = $params['module'];
|
|
$pars['plugin'] = $params['plugin'];
|
|
$pars['tid'] = $params['tid'];
|
|
|
|
$log = pdo_get(PDO_NAME.'paylogvfour',$pars); //当前订单已存在则取出
|
|
|
|
if($done == 1) { //支付成功后 点击完成按钮执行。
|
|
if(empty($log)) wl_debug("log empty!"); //若$log为空打印error并退出。
|
|
if (!empty($log['tag'])) {
|
|
$tag = iunserializer($log['tag']);
|
|
$log['uid'] = $tag['uid'];
|
|
}
|
|
$ret = array();
|
|
$ret['weid'] = $log['uniacid'];
|
|
$ret['uniacid'] = $log['uniacid'];
|
|
$ret['result'] = 'success';
|
|
$ret['type'] = $log['type'];
|
|
$ret['from'] = 'return';
|
|
$ret['tid'] = $log['tid'];
|
|
$ret['uniontid'] = $log['uniontid'];
|
|
$ret['user'] = $log['openid'];
|
|
$ret['fee'] = $log['fee'];
|
|
$ret['tag'] = $tag;
|
|
$ret['is_usecard'] = $log['is_usecard'];
|
|
$ret['card_type'] = $log['card_type'];
|
|
$ret['card_fee'] = $log['card_fee'];
|
|
$ret['card_id'] = $log['card_id'];
|
|
exit(self::payReturn($ret));
|
|
}
|
|
if ($_W['isajax']) {
|
|
$dos = array();
|
|
$setting = uni_setting($_W['uniacid'], array('payment', 'creditbehaviors'));
|
|
if(!is_array($setting['payment'])) wl_message(array('errno'=>1,'message'=>"没有有效的支付方式, 请联系网站管理员.")); //判断微擎是否有支付设置内容。
|
|
if(!empty($setting['payment']['credit']['switch'])) $dos[] = 'credit';
|
|
if(!empty($setting['payment']['alipay']['switch'])) $dos[] = 'alipay';
|
|
if(!empty($setting['payment']['wechat']['switch'])) $dos[] = 'wechat';
|
|
|
|
$type = in_array($paytype, $dos) ? $paytype : '';
|
|
if(empty($type)) wl_message(array('errno'=>1,'message'=>"支付方式错误,请联系商家"));
|
|
|
|
$data = array(
|
|
'uniacid' => $order['uniacid'] ? : $_W['uniacid'] ,
|
|
'source' => $_W['source'] ,
|
|
'acid' => $_W['acid'] ,
|
|
'openid' => $_W['openid'] ,
|
|
'module' => $params['module'] ,
|
|
'plugin' => $params['plugin'] ,
|
|
'tid' => $params['tid'] ,
|
|
'fee' => $params['fee'] ,
|
|
'card_fee' => $params['fee'] ,
|
|
'status' => '0' ,
|
|
'is_usecard' => '0' ,
|
|
'type' => $type //支付方式
|
|
);
|
|
if (empty($log)) pdo_insert(PDO_NAME.'paylogvfour', $data); //生成paylog记录
|
|
|
|
$log = pdo_get(PDO_NAME.'paylogvfour',$pars); //获得新的支付记录
|
|
if(!empty($log) && $type != 'credit' && $log['status'] != '0') wl_message(array('errno'=>1,'message'=>"这个订单已经支付成功, 不需要重复支付!"));
|
|
$uniontid = createUniontid(); //生成商户订单号
|
|
|
|
pdo_update(PDO_NAME.'paylogvfour', array('type'=>$type,'uniontid'=>$uniontid), array('plid' => $log['plid'])); //更新type和uniontid到微擎core_paylog。
|
|
|
|
$log = pdo_get(PDO_NAME.'paylogvfour',$pars); //更新后再次取出支付记录。
|
|
|
|
if($type == 'wechat') { //微信支付
|
|
$wechat = $setting['payment']['wechat'];
|
|
|
|
$payset = Setting::wlsetting_read('payset');
|
|
$partner = unserialize($payset['partner']);
|
|
|
|
$row = pdo_fetch('SELECT `key`,`secret` FROM ' . tablename('account_wechats') . ' WHERE `acid`=:acid', array(':acid' => $wechat['account']));
|
|
$wechat['appid'] = $row['key'];
|
|
$wechat['secret'] = $row['secret'];
|
|
$params = array(
|
|
'tid' => $log['tid'],
|
|
'fee' => $log['card_fee'],
|
|
'user' => $log['openid'],
|
|
'title' => $params['title'],
|
|
'uniontid' => $log['uniontid'],
|
|
);
|
|
if($payset['wechatstatus'] == 2){
|
|
$wechat['appid'] = $partner['appid'];
|
|
$wechat['secret'] = $partner['appsecret'];
|
|
$wechat['mchid'] = $partner['mchid'];
|
|
$wechat['sub_mch_id'] = $partner['submchid'];
|
|
$wechat['sub_appid'] = $partner['chappid'];
|
|
}
|
|
$notify_url = MODULE_URL . 'payment/wechat/weixin_notify.php';
|
|
$wOpt = PayBuild::wechat_build($params, $wechat,$notify_url);
|
|
if (is_error($wOpt)) {
|
|
if ($wOpt['message'] == 'invalid out_trade_no' || $wOpt['message'] == 'OUT_TRADE_NO_USED') {
|
|
$id = date('YmdH');
|
|
pdo_update(PDO_NAME.'paylogvfour', array('plid' => $id), array('plid' => $log['plid']));
|
|
pdo_query("ALTER TABLE ".tablename(PDO_NAME.'paylogvfour')." auto_increment = ".($id+1).";");
|
|
wl_message(array('errno'=>1,'message'=>"抱歉,发起支付失败,系统已经修复此问题,请重新尝试支付。"));
|
|
}
|
|
wl_message(array('errno'=>1,'message'=>"抱歉,发起支付失败,具体原因为:“{$wOpt['errno']}:{$wOpt['message']}”。请及时联系站点管理员。"));
|
|
}
|
|
}
|
|
die(json_encode(array('errno'=>0,'message'=>"支付成功!",'data'=>$wOpt)));
|
|
}
|
|
|
|
}
|
|
}
|
|
|