model('activity'); load()->model('module'); load()->model('payment'); load()->func('communication'); if ($do == 'check_password') { $password = safe_gpc_string($_GPC['password']); $user_info = mc_fetch($_W['member']['uid']); $password = md5($password . $user_info['salt']); if ($password == $user_info['pay_password']) { message(0, '', 'ajax'); } else { message(1, '', 'ajax'); } } $moduels = uni_modules(); $params = @json_decode(base64_decode($_GPC['params']), true); if(empty($params) || !array_key_exists($params['module'], $moduels)) { message('访问错误.'); } $setting = uni_setting($_W['uniacid'], 'payment'); if (empty($setting['payment'])) { message('支付方式错误,请联系商家', '', 'error'); } foreach ($setting['payment'] as &$value) { $value['switch'] = $params['module'] == 'recharge' ? $value['recharge_switch'] : $value['pay_switch']; } unset($value); $dos = array(); if(!empty($setting['payment']['credit']['switch'])) { $dos[] = 'credit'; } if(!empty($setting['payment']['alipay']['switch'])) { $dos[] = 'alipay'; } if(!empty($setting['payment']['wechat']['switch'])) { $dos[] = 'wechat'; } if(!empty($setting['payment']['delivery']['switch'])) { $dos[] = 'delivery'; } if(!empty($setting['payment']['unionpay']['switch'])) { $dos[] = 'unionpay'; } if(!empty($setting['payment']['baifubao']['switch'])) { $dos[] = 'baifubao'; } if(!empty($setting['payment']['jueqiymf']['switch'])) { $dos[] = 'jueqiymf'; } if(!empty($setting['payment']['mix']['switch'])) { $dos[] = 'mix'; } $do = $_GPC['do']; $type = in_array($do, $dos) ? $do : ''; if(empty($type)) { message('支付方式错误,请联系商家', '', 'error'); } if(!empty($type)) { $log = pdo_get('core_paylog', array('uniacid' => $_W['uniacid'], 'module' => $params['module'], 'tid' => $params['tid'])); if(!empty($log) && ($type != 'credit' && !empty($_GPC['notify'])) && $log['status'] != '0') { message('这个订单已经支付成功, 不需要重复支付.'); } $update_card_log = array( 'is_usecard' => '0', 'card_type' => '0', 'card_id' => '0', 'card_fee' => $log['fee'], 'type' => $type, ); pdo_update('core_paylog', $update_card_log, array('plid' => $log['plid'])); $log['is_usecard'] = '0'; $log['card_type'] = '0'; $log['card_id'] = '0'; $log['card_fee'] = $log['fee']; $moduleid = pdo_fetchcolumn("SELECT mid FROM ".tablename('modules')." WHERE name = :name", array(':name' => $params['module'])); $moduleid = empty($moduleid) ? '000000' : sprintf("%06d", $moduleid); $record = array(); $record['type'] = $type; if (empty($log['uniontid'])) { $record['uniontid'] = $log['uniontid'] = date('YmdHis').$moduleid.random(8,1); } if($type != 'delivery') { if ($_GPC['mix_pay']) { $setting = uni_setting($_W['uniacid'], array('creditbehaviors')); $credtis = mc_credit_fetch($_W['member']['uid']); if ($credtis[$setting['creditbehaviors']['currency']] > 0 && in_array('mix', $dos) && $credtis[$setting['creditbehaviors']['currency']] < $log['card_fee']) { $mix_credit_log = $log; unset($mix_credit_log['plid']); $mix_credit_log['uniontid'] = date('YmdHis') . $moduleid . random(8,1); $mix_credit_log['type'] = 'credit'; $mix_credit_log['fee'] = $credtis[$setting['creditbehaviors']['currency']]; $mix_credit_log['card_fee'] = $credtis[$setting['creditbehaviors']['currency']]; pdo_update('core_paylog', array('fee' => $log['card_fee'] - $credtis[$setting['creditbehaviors']['currency']], 'card_fee' => $log['card_fee'] - $credtis[$setting['creditbehaviors']['currency']]), array('plid' => $log['plid'])); pdo_insert('core_paylog', $mix_credit_log); } } $we7_coupon_info = module_fetch('we7_coupon'); if (!empty($we7_coupon_info)) { $coupon_id = intval($_GPC['coupon_id']); $coupon_info = pdo_get('coupon', array('uniacid' => $_W['uniacid'], 'id' => $coupon_id)); $coupon_info['fee'] = $log['card_fee']; if (!empty($coupon_info)) { $extra = iunserializer($coupon_info['extra']); if($coupon_info['type'] == COUPON_TYPE_DISCOUNT) { $coupon_info['fee'] = sprintf("%.2f", ($log['fee'] * ($extra['discount'] / 100))); } elseif ($coupon_info['type'] == COUPON_TYPE_CASH) { if($log['fee'] >= $extra['least_cost'] * 0.01) { $coupon_info['fee'] = sprintf("%.2f", ($log['fee'] - $extra['reduce_cost'] / 100)); } } if (!empty($_GPC['code']) && !empty($_GPC['coupon_id'])) { $record['is_usecard'] = 1; $record['card_fee'] = $coupon_info['fee']; $record['encrypt_code'] = trim($_GPC['code']); activity_coupon_type_init(); if (COUPON_TYPE == WECHAT_COUPON) { $record['card_type'] = 1; $record['card_id'] = $coupon_info['id']; } else { $record['card_type'] = 2; $record['card_id'] = $coupon_info['id']; } } } } } if (empty($log)) { message('系统支付错误, 请稍后重试.'); } else { pdo_update('core_paylog', $record, array('plid' => $log['plid'])); if (!empty($log['uniontid']) && $record['card_fee']) { $log['card_fee'] = $record['card_fee']; $log['card_id'] = $record['card_id']; $log['card_type'] = $record['card_type']; $log['is_usecard'] = $record['is_usecard']; } } $ps = array( 'tid' => $log['plid'], 'uniontid' => $log['uniontid'], 'user' => $_W['openid'], 'fee' => $log['card_fee'], 'title' => $params['title'], ); if ($type == 'alipay') { if (!empty($log['plid'])) { pdo_update('core_paylog', array('openid' => $_W['member']['uid']), array('plid' => $log['plid'])); } $ret = alipay_build($ps, $setting['payment']['alipay']); if($ret['url']) { echo ''; exit(); } } if ($type == 'wechat') { if(!empty($log['plid'])) { $tag = array(); $tag['acid'] = $_W['acid']; $tag['uid'] = $_W['member']['uid']; pdo_update('core_paylog', array('openid' => $_W['openid'], 'tag' => iserializer($tag)), array('plid' => $log['plid'])); } $ps['title'] = urlencode($params['title']); $sl = base64_encode(json_encode($ps)); $auth = sha1($sl . $_W['uniacid'] . $_W['config']['setting']['authkey']); $oauth_url = uni_account_oauth_host(); if (!empty($oauth_url)) { $callback = $oauth_url . "payment/wechat/pay.php?i={$_W['uniacid']}&auth={$auth}&ps={$sl}"; } $proxy_pay_account = payment_proxy_pay_account(); if (!is_error($proxy_pay_account)) { $forward = $proxy_pay_account->getOauthCodeUrl(urlencode($callback), 'we7sid-'.$_W['session_id']); header('Location: ' . $forward); exit; } header("Location: $callback"); exit(); } if ($type == 'jueqiymf') { $sl = base64_encode(json_encode($ps)); $auth = sha1($sl . $_W['uniacid'] . $_W['config']['setting']['authkey']); header("location: ../payment/jueqiymf/pay.php?i={$_W['uniacid']}&auth={$auth}&ps={$sl}"); exit(); } if($type == 'credit') { $we7_coupon_info = module_fetch('we7_coupon'); $setting = uni_setting($_W['uniacid'], array('creditbehaviors')); $credtis = mc_credit_fetch($_W['member']['uid']); $sql = 'SELECT * FROM ' . tablename('core_paylog') . ' WHERE `plid`=:plid'; $pars = array(); $pars[':plid'] = $ps['tid']; $log = pdo_fetch($sql, $pars); if($log['module'] == 'recharge') { message('不能使用余额支付', referer(), 'error'); } if (!is_numeric($log['openid'])) { $uid = mc_openid2uid($log['openid']); if (empty($uid)) { $fans_info = mc_init_fans_info($log['openid']); $uid = $fans_info['uid']; } $log['openid'] = $uid; } if(empty($_GPC['notify'])) { if(!empty($log) && $log['status'] == '0') { if($credtis[$setting['creditbehaviors']['currency']] < $ps['fee']) { message("余额不足以支付, 需要 {$ps['fee']}, 当前 {$credtis[$setting['creditbehaviors']['currency']]}"); } if (!empty($we7_coupon_info) && $log['is_usecard'] == 1 && !empty($log['encrypt_code'])) { $coupon_info = pdo_get('coupon', array('id' => $log['card_id']), array('id')); $coupon_record = pdo_get('coupon_record', array('couponid' => $log['card_id'], 'openid' => $_W['openid'], 'code' => $log['encrypt_code'], 'status' => '1')); $status = activity_coupon_use($coupon_info['id'], $coupon_record['id'], $params['module']); } $fee = floatval($ps['fee']); if (!empty($we7_coupon_info)) { load()->model('mc'); $store_id = 0; if ($log['module'] == 'we7_coupon') { $paycenter_order = pdo_get('paycenter_order', array('id' => $log['tid']), array('store_id')); $store_id = $paycenter_order['store_id']; } $is_grant_credit = mc_card_grant_credit($log['openid'], $fee, $store_id, $log['module']); $result = mc_credit_update($log['openid'], 'credit2', -$fee, array(0, $tip, $log['module'], 0, $store_id, 3)); } else { $result = mc_credit_update($_W['member']['uid'], $setting['creditbehaviors']['currency'], -$fee, array($_W['member']['uid'], '消费' . $setting['creditbehaviors']['currency'] . ':' . $fee)); } if (is_error($result)) { message($result['message'], '', 'error'); } pdo_update('core_paylog', array('status' => '1'), array('plid' => $log['plid'])); if (!empty($_W['openid'])) { if (is_error($is_grant_credit)) { $grant_credit_nums = 0; } else { $grant_credit_nums = $is_grant_credit['message']; } if (!empty($params['grant_credit1_num'])) { $grant_credit_nums += intval($params['grant_credit1_num']); } mc_notice_credit2($_W['openid'], $_W['member']['uid'], $fee, $grant_credit_nums, '线上消费'); } $site = WeUtility::createModuleSite($log['module']); if(!is_error($site)) { $site->weid = $_W['weid']; $site->uniacid = $_W['uniacid']; $site->inMobile = true; $method = 'payResult'; if (method_exists($site, $method)) { $ret = array(); $ret['result'] = 'success'; $ret['type'] = $log['type']; $ret['from'] = 'return'; $ret['tid'] = $log['tid']; $ret['user'] = $log['openid']; $ret['fee'] = $log['fee']; $ret['weid'] = $log['weid']; $ret['uniacid'] = $log['uniacid']; $ret['acid'] = $log['acid']; $ret['is_usecard'] = $log['is_usecard']; $ret['card_type'] = $log['card_type']; $ret['card_fee'] = $log['card_fee']; $ret['card_id'] = $log['card_id']; echo ''; $site->$method($ret); } } } } else { $site = WeUtility::createModuleSite($log['module']); if(!is_error($site)) { $site->weid = $_W['weid']; $site->uniacid = $_W['uniacid']; $site->inMobile = true; $method = 'payResult'; if (method_exists($site, $method)) { $ret = array(); $ret['result'] = 'success'; $ret['type'] = $log['type']; $ret['from'] = 'notify'; $ret['tid'] = $log['tid']; $ret['user'] = $log['openid']; $ret['fee'] = $log['fee']; $ret['weid'] = $log['weid']; $ret['uniacid'] = $log['uniacid']; $ret['acid'] = $log['acid']; $ret['is_usecard'] = $log['is_usecard']; $ret['card_type'] = $log['card_type']; $ret['card_fee'] = $log['card_fee']; $ret['card_id'] = $log['card_id']; $site->$method($ret); } } } } if ($type == 'delivery') { $we7_coupon_info = module_fetch('we7_coupon'); $sql = 'SELECT * FROM ' . tablename('core_paylog') . ' WHERE `plid`=:plid'; $pars = array(); $pars[':plid'] = $ps['tid']; $log = pdo_fetch($sql, $pars); if(!empty($log) && $log['status'] == '0') { if (!empty($we7_coupon_info) && $log['is_usecard'] == 1) { $coupon_info = pdo_get('coupon', array('id' => $log['card_id']), array('id')); $coupon_record = pdo_get('coupon_record', array('couponid' => $log['card_id'], 'openid' => $_W['openid'], 'code' => $log['encrypt_code'], 'status' => '1')); $status = activity_coupon_use($coupon_info['id'], $coupon_record['id'], $params['module']); if (is_error($status)) { message($status['message']); } } $site = WeUtility::createModuleSite($log['module']); if(!is_error($site)) { $site->weid = $_W['weid']; $site->uniacid = $_W['uniacid']; $site->inMobile = true; $method = 'payResult'; if (method_exists($site, $method)) { $ret = array(); $ret['result'] = 'failed'; $ret['type'] = $log['type']; $ret['from'] = 'return'; $ret['tid'] = $log['tid']; $ret['user'] = $log['openid']; $ret['fee'] = $log['fee']; $ret['weid'] = $log['weid']; $ret['uniacid'] = $log['uniacid']; $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($site->$method($ret)); } } } } if ($type == 'unionpay') { $sl = base64_encode(json_encode($ps)); $auth = sha1($sl . $_W['uniacid'] . $_W['config']['setting']['authkey']); header("location: ../payment/unionpay/pay.php?i={$_W['uniacid']}&auth={$auth}&ps={$sl}"); exit(); } if ($type == 'baifubao') { $sl = base64_encode(json_encode($ps)); $auth = sha1($sl . $_W['uniacid'] . $_W['config']['setting']['authkey']); header("location: ../payment/baifubao/pay.php?i={$_W['uniacid']}&auth={$auth}&ps={$sl}"); exit(); } }