集中PayPal的webhook记录到在线支付记录

webht/payment
Lei OT 3 months ago
parent 740f1aed0a
commit 155c137a97

@ -465,6 +465,9 @@ class Online_payment_note_model extends CI_Model {
return $result_object; return $result_object;
} }
/**
* @uses WxpayService::query
*/
public function add_note_wxpay($result_data, $target_account, $type='pay') public function add_note_wxpay($result_data, $target_account, $type='pay')
{ {
$this->load->model('Online_payment_account_model', 'account_model'); $this->load->model('Online_payment_account_model', 'account_model');

@ -158,9 +158,9 @@
<a <?php if($method_code==='15016') { ?> class="text-muted"<?php } ?> <a <?php if($method_code==='15016') { ?> class="text-muted"<?php } ?>
href="<?php echo set_url_param(array('method'=>15016)) ?>">微信&raquo;</a> href="<?php echo set_url_param(array('method'=>15016)) ?>">微信&raquo;</a>
&NonBreakingSpace; &NonBreakingSpace;
<!-- <a <?php if($method_code==='15002') { ?> class="text-muted"<?php } ?> <a <?php if($method_code==='15002') { ?> class="text-muted"<?php } ?>
href="<?php //echo set_url_param(array('method'=>15002)) ?>">PayPal&raquo;</a> href="<?php echo set_url_param(array('method'=>15002)) ?>">PayPal&raquo;</a>
&NonBreakingSpace; --> &NonBreakingSpace;
<a <?php if($method_code==='15018,15035') { ?> class="text-muted"<?php } ?> <a <?php if($method_code==='15018,15035') { ?> class="text-muted"<?php } ?>
href="<?php echo set_url_param(array('method'=>'15018,15035')) ?>">信用卡&raquo;</a> href="<?php echo set_url_param(array('method'=>'15018,15035')) ?>">信用卡&raquo;</a>
&NonBreakingSpace; &NonBreakingSpace;

@ -11,6 +11,8 @@ class Index extends CI_Controller {
$this->load->model('Paypal_model'); $this->load->model('Paypal_model');
$this->load->model('Note_model'); $this->load->model('Note_model');
$this->load->model('Group_model'); $this->load->model('Group_model');
$this->load->model('Online_payment_note_model', 'online_note');
bcscale(2); bcscale(2);
} }
@ -655,10 +657,12 @@ class Index extends CI_Controller {
$default_payee = new stdClass(); $default_payee = new stdClass();
$default_payee->email_address = "pays@chinahighlights.com"; $default_payee->email_address = "pays@chinahighlights.com";
$default_payee->merchant_id = "JE4VX9SSVGTVN"; $default_payee->merchant_id = "JE4VX9SSVGTVN";
$default_payee->merchant = "cht";
$tp_payee = new stdClass(); $tp_payee = new stdClass();
$tp_payee->email_address = "pay@trippest.com"; $tp_payee->email_address = "pay@trippest.com";
$tp_payee->merchant_id = "5FUTQ9SU5P7CJ"; $tp_payee->merchant_id = "5FUTQ9SU5P7CJ";
$tp_payee->merchant = "trippest";
$pn_txn_id = $post_data->resource->id; $pn_txn_id = $post_data->resource->id;
@ -669,13 +673,20 @@ class Index extends CI_Controller {
$pn_mc_fee = ''; $pn_mc_fee = '';
$GAI_API = new stdClass(); $GAI_API = new stdClass();
$pn_receiver_account = ''; $pn_receiver_account = '';
$pn_receiver_account_name = '';
$fund_type = 'pay';
$net_amount = '';
$transaction_status = '';
switch ($post_data->event_type) { switch ($post_data->event_type) {
case 'PAYMENT.SALE.COMPLETED': case 'PAYMENT.SALE.COMPLETED':
$fund_type = 'pay';
$pn_invoice = $post_data->resource->invoice_number; $pn_invoice = $post_data->resource->invoice_number;
$pn_mc_gross = $post_data->resource->amount->total; $pn_mc_gross = $post_data->resource->amount->total;
$pn_mc_currency = $post_data->resource->amount->currency; $pn_mc_currency = $post_data->resource->amount->currency;
$pn_payment_status = $post_data->resource->state; $pn_payment_status = $post_data->resource->state;
$transaction_status = 'completed';
$post_data->mc_fee = $post_data->resource->transaction_fee->value; $post_data->mc_fee = $post_data->resource->transaction_fee->value;
$net_amount = bcsub($pn_mc_gross, $post_data->mc_fee);
$GAI_API->payee = new stdClass(); $GAI_API->payee = new stdClass();
if (stripos($post_data->resource->soft_descriptor, 'CHINAHIG') !== false) { if (stripos($post_data->resource->soft_descriptor, 'CHINAHIG') !== false) {
@ -687,15 +698,19 @@ class Index extends CI_Controller {
$GAI_API->res_links = $post_data->resource->links; $GAI_API->res_links = $post_data->resource->links;
$post_data->GAI_API = $GAI_API; $post_data->GAI_API = $GAI_API;
$pn_receiver_account = $GAI_API->payee->email_address; $pn_receiver_account = $GAI_API->payee->email_address;
$pn_receiver_account_name = $GAI_API->payee->merchant;
break; break;
case 'PAYMENT.SALE.REFUNDED': case 'PAYMENT.SALE.REFUNDED':
$pn_invoice = $post_data->resource->invoice_number; $pn_invoice = $post_data->resource->invoice_number;
$pn_mc_currency = $post_data->resource->amount->currency; $pn_mc_currency = $post_data->resource->amount->currency;
$fund_type = 'refund';
$pn_payment_status = 'Refunded'; $pn_payment_status = 'Refunded';
$transaction_status = 'completed';
$pn_mc_gross = '-' . $post_data->resource->amount->total; $pn_mc_gross = '-' . $post_data->resource->amount->total;
$post_data->parent_txn_id = $post_data->resource->sale_id; $post_data->parent_txn_id = $post_data->resource->sale_id;
$pn_mc_fee = '-' . $post_data->resource->refund_from_transaction_fee->value; $pn_mc_fee = bcsub(0, $post_data->resource->refund_from_transaction_fee->value);
$post_data->mc_fee = $pn_mc_fee; $post_data->mc_fee = $pn_mc_fee;
$net_amount = isset($post_data->resource->seller_receivable_breakdown) ? '-'.$post_data->resource->seller_receivable_breakdown->refund_from_received_amount->value : $pn_mc_gross;
$GAI_API->payee = new stdClass(); $GAI_API->payee = new stdClass();
$GAI_API->res_links = $post_data->resource->links; $GAI_API->res_links = $post_data->resource->links;
@ -704,38 +719,46 @@ class Index extends CI_Controller {
case 'PAYMENT.CAPTURE.COMPLETED': case 'PAYMENT.CAPTURE.COMPLETED':
case 'PAYMENT.CAPTURE.DECLINED': case 'PAYMENT.CAPTURE.DECLINED':
$fund_type = 'pay';
$pn_invoice = $post_data->resource->invoice_id; $pn_invoice = $post_data->resource->invoice_id;
$pn_custom = $post_data->resource->custom_id; $pn_custom = $post_data->resource->custom_id;
$pn_mc_gross = $post_data->resource->amount->value; $pn_mc_gross = $post_data->resource->amount->value;
$pn_mc_currency = $post_data->resource->amount->currency_code; $pn_mc_currency = $post_data->resource->amount->currency_code;
$pn_payment_status = $post_data->resource->status; $pn_payment_status = $post_data->resource->status;
$transaction_status = strtolower($post_data->resource->status);
$post_data->mc_fee = isset($post_data->resource->seller_receivable_breakdown) ? $post_data->resource->seller_receivable_breakdown->paypal_fee->value : 0; $post_data->mc_fee = isset($post_data->resource->seller_receivable_breakdown) ? $post_data->resource->seller_receivable_breakdown->paypal_fee->value : 0;
$net_amount = isset($post_data->resource->seller_receivable_breakdown) ? $post_data->resource->seller_receivable_breakdown->net_amount->value : $pn_mc_gross;
$GAI_API->payee = $post_data->resource->payee; $GAI_API->payee = $post_data->resource->payee;
$GAI_API->res_links = $post_data->resource->links; $GAI_API->res_links = $post_data->resource->links;
$post_data->GAI_API = $GAI_API; $post_data->GAI_API = $GAI_API;
$pn_receiver_account = $GAI_API->payee->email_address; $pn_receiver_account = $GAI_API->payee->email_address;
$pn_receiver_account_name = $pn_receiver_account===$default_payee->email_address ? $default_payee->merchant : $tp_payee->merchant;
break; break;
case 'PAYMENT.CAPTURE.REFUNDED': case 'PAYMENT.CAPTURE.REFUNDED':
$fund_type = 'refund';
$pn_invoice = $post_data->resource->invoice_id; $pn_invoice = $post_data->resource->invoice_id;
$pn_custom = $post_data->resource->custom_id; $pn_custom = $post_data->resource->custom_id;
$pn_mc_currency = $post_data->resource->amount->currency_code; $pn_mc_currency = $post_data->resource->amount->currency_code;
$pn_mc_gross = '-' . $post_data->resource->amount->value; $pn_mc_gross = '-' . $post_data->resource->amount->value;
$pn_payment_status = 'Refunded'; $pn_payment_status = 'Refunded';
$transaction_status = 'completed';
// $post_data->parent_txn_id = $post_data->resource->sale_id; // $post_data->parent_txn_id = $post_data->resource->sale_id;
$parent_link = $post_data->resource->links[1]->href; $parent_link = $post_data->resource->links[1]->href;
$parent_path = parse_url($parent_link, PHP_URL_PATH); // Get the path from the URL $parent_path = parse_url($parent_link, PHP_URL_PATH); // Get the path from the URL
$post_data->parent_txn_id = basename($parent_path); $post_data->parent_txn_id = basename($parent_path);
$pn_mc_fee = '-' . $post_data->resource->seller_payable_breakdown->paypal_fee->value; $pn_mc_fee = bcsub(0, $post_data->resource->seller_payable_breakdown->paypal_fee->value);
$post_data->mc_fee = $pn_mc_fee; $post_data->mc_fee = $pn_mc_fee;
$net_amount = isset($post_data->resource->seller_payable_breakdown) ? '-'.$post_data->resource->seller_payable_breakdown->net_amount->value : $pn_mc_gross;
$GAI_API->payee = $post_data->resource->payer; $GAI_API->payee = $post_data->resource->payer;
$GAI_API->res_links = $post_data->resource->links; $GAI_API->res_links = $post_data->resource->links;
$post_data->GAI_API = $GAI_API; $post_data->GAI_API = $GAI_API;
$pn_receiver_account = $GAI_API->payee->email_address; $pn_receiver_account = $GAI_API->payee->email_address;
$pn_receiver_account_name = $pn_receiver_account===$default_payee->email_address ? $default_payee->merchant : $tp_payee->merchant;
break; break;
@ -780,6 +803,24 @@ class Index extends CI_Controller {
); );
log_message('error','paypal-webhook-succeed ' . $pn_txn_id . ' # ' . $pn_invoice); log_message('error','paypal-webhook-succeed ' . $pn_txn_id . ' # ' . $pn_invoice);
// echo 'ok'; // echo 'ok';
$to_online = [
'memo' => $pn_memo,
'transaction_id' => $pn_txn_id,
'invoice_id' => $pn_invoice,
'custom_id' => $pn_custom,
'pay_amount' => $pn_mc_gross,
'pay_currency' => $pn_mc_currency,
'net_amount' => $net_amount,
'pay_fee' => $post_data->mc_fee,
'transaction_status' => $transaction_status, // $pn_payment_status,
'payment_date' => $pn_payment_date,
'fund_source' => $pn_receiver_account_name,
'fund_type' => $fund_type,
'event' => $post_data->event_type,
'event_result' => $pn_payment_status,
'referer_id' => isset($post_data->parent_txn_id) ? $post_data->parent_txn_id : '',
];
$this->online_note->add_note_paypal($to_online);
} else { } else {
// echo 'no'; // echo 'no';
} }

@ -0,0 +1,585 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Online_payment_note_model extends CI_Model {
function __construct() {
parent::__construct();
bcscale(2);
$this->info = $this->load->database('INFO', TRUE);
}
public function if_note_exists($transaction_id, $raw_id=null)
{
if ($transaction_id === null) {
return null;
}
$order_sql = $raw_id===null ? " " : " AND OPN_rawOrderId='" . $raw_id . "'";
$ret = "SELECT TOP 1 * FROM OnlinePaymentNote WHERE OPN_transactionId=? $order_sql ORDER BY OPN_SN DESC ";
return $this->info->query($ret, array($transaction_id))->num_rows() > 0;
}
public function if_refund_exists($refund_id)
{
if ($refund_id === null) {
return null;
}
$ret = "SELECT TOP 1 * FROM OnlinePaymentNote WHERE OPN_rawOrderId=? ORDER BY OPN_SN DESC ";
return $this->info->query($ret, array($refund_id))->num_rows() > 0;
}
public function insert_note($column)
{
if ($column === null) {
return false;
}
$this->info->insert('OnlinePaymentNote', $column);
$ret = "SELECT TOP 1 * FROM OnlinePaymentNote WHERE OPN_transactionId=? ORDER BY OPN_SN DESC ";
return $this->info->query($ret, array($column['OPN_transactionId']))->row();
}
public function update_note($where, $column)
{
$update_str = $this->info->update_string('OnlinePaymentNote', $column, $where);
$this->info->query($update_str);
return TRUE;
}
public function update_send($id, $transactionId, $send)
{
$column = array("OPN_noticeSendStatus" => $send, "OPN_noticeSendTime" => date('Y-m-d H:i:s'));
$where = " OPN_transactionId = '$transactionId' AND OPN_SN=" . $id;
return $this->update_note($where, $column);
}
//设置订单号
public function set_invoice($id, $pn_invoice)
{
$column = array("OPN_orderId" => $pn_invoice);
$where = " OPN_SN=" . $id;
return $this->update_note($where, $column);
}
public function unsend_note($num=2, $method=null)
{
$this->init_query();
$this->topnum = $num;
// $this->send = " AND (OPN_noticeSendStatus='unsend' OR OPN_noticeSendStatus='' OR OPN_noticeSendStatus IS NULL) ";
$this->search = $method===null ? "" : " AND OPN_accountMethod IN ($method) ";
$this->send = " AND ISNULL(OPN_noticeSendStatus,'') in ('', 'unsend') ";
return $this->query_note();
}
public function closed_note($date, $num=2, $method=null)
{
$this->init_query();
$this->topnum = $num;
$this->send = " AND (OPN_noticeSendStatus) = 'closed' ";
$this->search = $method===null ? "" : " AND OPN_accountMethod IN ($method) ";
$this->search .= " AND OPN_noticeTime BETWEEN '$date 00:00:00' AND '$date 23:59:59' ";
return $this->query_note();
}
public function sendfail_note($num=2, $method=null)
{
$this->init_query();
$this->topnum = $num;
$this->search = $method===null ? "" : " AND OPN_accountMethod IN ($method) ";
// 1小时前
$date = date("Y-m-d H:i:s", time() - 3600);
$this->search .= $num !== false ? " AND OPN_noticeSendTime < '$date' " : '';
$this->send = " AND OPN_noticeSendStatus='sendfail' ";
return $this->query_note();
}
public $topnum = false;
public $orderby = false;
public $send = false;
public $search = false;
public $transactionId = false;
public $payment_status = false;
// public $payment_method = false;
public function init_query() {
$this->topnum = false;
$this->send = false;
$this->search = false;
$this->payment_status = false;
$this->transactionId = false;
// if ($GLOBALS['__PAYMENT_METHOD_CODE__']) {
// $this->payment_method = ' AND opn.OPN_accountMethod = ' . $GLOBALS['__PAYMENT_METHOD_CODE__'] . ' ';
// }
$this->orderby = ' ORDER BY OPN_SN DESC ';
}
private $code_brandname = array(
"15002" => "PayPal",
"15010" => "PayPal",
"15015" => "Alipay",
"15016" => "WeChat",
"15018" => "Credit Card-iPaylinks",
"15035" => "Credit Card-Lianlian",
);
private $wxpay_app = array(
"wx749246dd935ca07b" => "APP",
"wx5d01021a6d515098" => "HLY", // "花梨鹰小程序", // 交行收款码
"wxd6c8dd69af5128cd" => "", // "NATIVE",
"wx7e605820faf98a05" => "Trippest-NATIVE",
"0" => "unknown",
);
public function set_brandname(&$ele)
{
$ele->brand_name = "none";
if ($this->code_brandname[$ele->OPN_accountMethod]) {
$ele->brand_name = $this->code_brandname[$ele->OPN_accountMethod];
}
$raw = json_decode($ele->OPN_rawContent);
$wx_app = isset($raw->app_id) ? $raw->app_id : '0';
$wx_app = $wx_app!=='0' ? $wx_app : (isset($raw->appid) ? $raw->appid : '0');
$ele->app_name = "";
if ($this->wxpay_app[$wx_app]) {
$ele->app_name = $this->wxpay_app[$wx_app];
}
}
public function query_note()
{
$top_sql = $this->topnum ? (" TOP " . $this->topnum) : "";
$sql = "SELECT $top_sql opn.*
FROM [InfoManager].[dbo].[OnlinePaymentNote] opn
WHERE 1=1 ";
// $this->payment_method ? $sql.=$this->payment_method : false;
$this->send ? $sql.=$this->send : false;
$this->search ? $sql.=$this->search : false;
$this->transactionId ? $sql.=$this->transactionId : false;
$this->orderby ? $sql.=$this->orderby : false;
// log_message('error', PHP_EOL . $sql);
$query = $this->info->query($sql);
$result = $query->result();
array_walk($result, 'Online_payment_note_model::set_brandname');
return $result;
}
public function get_note($opn_id)
{
$this->init_query();
$this->topnum=1;
$this->search = " AND opn.OPN_SN=" . $this->info->escape($opn_id);
return $this->query_note();
}
/**
* @param mixed $where ['OPN_SN' => ['=', {val}] ]
*/
public function get_note_where($where) {
$this->init_query();
$this->topnum=1;
$this->search = '';
foreach ($where as $key => $value) {
$where_val = '';
switch (strtolower($value[0])) {
case '=':
$where_val = " = {$this->info->escape($value[1])}";
break;
case 'in':
$where_val = " IN ({$this->info->escape($value[1])})";
break;
default:
$where_val = " = {$this->info->escape($value[1])}";
break;
}
$this->search .= " AND {$key} {$where_val} ";
}
return $this->query_note();
}
public function search_key($keyword)
{
$this->init_query();
$this->topnum = 300;
$keyword = trim($keyword);
$search_sql = "";
if ( ! empty($keyword)) {
$search_sql.=" AND ( OPN_transactionId = '$keyword'
OR OPN_relatedId like '%$keyword%'
OR OPN_orderId like '%$keyword%'
OR OPN_rawOrderId like '%$keyword%' )";
}
$this->search = $search_sql;
return $this->query_note();
}
public function search_date($date, $method=null)
{
$this->init_query();
$this->search = $method===null ? "" : " AND OPN_accountMethod IN ($method) ";
$this->search .= " AND OPN_noticeTime BETWEEN '$date 00:00:00' AND '$date 23:59:59' ";
$this->send = " AND isnull(OPN_noticeSendStatus,'') NOT IN ('', 'sendfail', 'unsend', 'closed' )";
return $this->query_note();
}
/*!
* 导出记录
* @date 2019-04-28
* @param integer $sn [description]
*/
public function list_export_record($sn=0)
{
$search_sql = $sn===0 ? "" : " and TEL_SN=$sn ";
$sql = "SELECT TOP 10 *
FROM [InfoManager].[dbo].[Transaction_Export_Log]
WHERE 1=1
$search_sql
order by TEL_SN desc";
return $this->info->query($sql)->result();
}
public function query_ipalinkslog_memo($memo)
{
$sql = "SELECT *
from IPayLinksLog
where CHARINDEX(?,IPL_memo)>0";
return $this->info->query($sql, array($memo))->row();
}
public function query_ipalinkslog_dealid($id)
{
$sql = "SELECT *
from IPayLinksLog
where IPL_dealId=?";
return $this->info->query($sql, array($id))->row();
}
public function query_related($related_id)
{
$this->init_query();
$this->search = " AND OPN_transactionId='$related_id' and OPN_accountType is not null ";
return $this->query_note();
}
/**
*
* @param [type] $pay_method
*
* 选择日期:
* @param [type] $from_date
* @param [type] $to_date
*
* 环比日期:
* @param [type] $from_date_fomer
* @param [type] $to_date_former
*
* 上年同期:
* @param [type] $from_date_year
* @param [type] $to_date_year
*
* 本年度开始日期: {Year}-01-01
* @param [type] $at_year
*/
public function total_by_method($pay_method,
$from_date, $to_date,
$from_date_fomer, $to_date_former,
$from_date_year, $to_date_year,
$at_year
)
{
$sql = " SET NOCOUNT ON;
DECLARE @type varchar(10)='$pay_method'
declare @this_year date='$at_year'
declare @from_date date='$from_date'
declare @to_date date='$to_date'
declare @from_date_former date='$from_date_fomer'
declare @to_date_former date='$to_date_former'
declare @from_date_last_year date='$from_date_year'
declare @to_date_last_year date='$to_date_year'
declare @unique_opn table (
id bigint IDENTITY(1,1) primary key,
--opn_sn bigint,
OPN_transactionId varchar(512),
OPN_accountMethod varchar(100),
OPN_noticeType varchar(100),
OPN_currency varchar(100),
OPN_orderAmount varchar(512),
OPN_entryAmountCNY varchar(512),
OPN_completeTime date
)
insert into @unique_opn (
--opn_sn ,
OPN_transactionId ,
OPN_accountMethod ,
OPN_noticeType ,
OPN_currency ,
OPN_orderAmount ,
OPN_entryAmountCNY ,
OPN_completeTime
)
select
--opn_sn ,
OPN_transactionId ,
OPN_accountMethod ,
OPN_noticeType ,
OPN_currency ,
OPN_orderAmount ,
OPN_entryAmountCNY ,
OPN_completeTime
from InfoManager.dbo.OnlinePaymentNote
where OPN_completeTime>@from_date_last_year
group by
--opn_sn ,
OPN_transactionId ,
OPN_accountMethod ,
OPN_noticeType ,
OPN_currency ,
OPN_orderAmount ,
OPN_entryAmountCNY ,
OPN_completeTime
SELECT isnull(cal.select_date_method,ISNULL(cal.last_method,ISNULL(cal.year_method, cal.this_year_method ))) as OPN_accountMethod
,method_total_income,method_total_income_cmp
,isnull(year_method_total_income,0) year_method_total_income
,this_year_method_total_income
--,REPLACE(CONVERT(VARCHAR, CONVERT(MONEY, method_total_income), 1), '.00', '') method_total_income
--,REPLACE(CONVERT(VARCHAR, CONVERT(MONEY, method_total_income_cmp), 1), '.00', '') method_total_income_cmp
,case when ISNULL( method_total_income_cmp,0)=0 then 100 else CONVERT(decimal(10,2),
round( (method_total_income-method_total_income_cmp)/method_total_income_cmp*100 ,2 )
) end AS quarter_rate
--,REPLACE(CONVERT(VARCHAR, CONVERT(MONEY, isnull(year_method_total_income,0)), 1), '.00', '') year_method_total_income
,case when ISNULL( year_method_total_income,0)=0 then 100 else CONVERT(decimal(10,2),
round( (method_total_income-year_method_total_income)/year_method_total_income*100 ,2 )
) end AS year_rate
--,REPLACE(CONVERT(VARCHAR, CONVERT(MONEY, this_year_method_total_income), 1), '.00', '') this_year_method_total_income
FROM
(
SELECT *
FROM
(
SELECT OPN_accountMethod,OPN_accountMethod select_date_method
,SUM(
ISNULL( CONVERT(decimal(10,2),OPN_entryAmountCNY),
Tourmanager.dbo.GetSSJEFromSQJE(
OPN_accountMethod,
REPLACE(OPN_currency, 'CNY', 'RMB'),
CONVERT(decimal(10,2),OPN_orderAmount)
)
)
) AS method_total_income
FROM @unique_opn
WHERE OPN_completeTime BETWEEN @from_date AND @to_date
and OPN_noticeType=@type
GROUP BY OPN_accountMethod
) AS method
full join (
SELECT OPN_accountMethod last_method
,SUM(
[Tourmanager].[dbo].ZeroToOne(
ISNULL( CONVERT(decimal(10,2),OPN_entryAmountCNY),
Tourmanager.dbo.GetSSJEFromSQJE(
OPN_accountMethod,
REPLACE(OPN_currency, 'CNY', 'RMB'),
CONVERT(decimal(10,2),OPN_orderAmount)
)
)
)
) AS method_total_income_cmp
FROM @unique_opn
WHERE OPN_completeTime BETWEEN @from_date_former AND @to_date_former
and OPN_noticeType=@type
GROUP BY OPN_accountMethod
) as cmp on method.OPN_accountMethod=cmp.last_method
full join (
SELECT OPN_accountMethod year_method
,SUM(
[Tourmanager].[dbo].ZeroToOne(
ISNULL( CONVERT(decimal(10,2),OPN_entryAmountCNY),
Tourmanager.dbo.GetSSJEFromSQJE(
OPN_accountMethod,
REPLACE(OPN_currency, 'CNY', 'RMB'),
CONVERT(decimal(10,2),OPN_orderAmount)
)
)
)
) AS year_method_total_income
FROM @unique_opn
WHERE OPN_completeTime BETWEEN @from_date_last_year AND @to_date_last_year
and OPN_noticeType=@type
GROUP BY OPN_accountMethod
) as year_cmp on isnull(method.OPN_accountMethod,cmp.last_method)=year_cmp.year_method
full join (
SELECT OPN_accountMethod this_year_method
,SUM(
[Tourmanager].[dbo].ZeroToOne(
ISNULL( CONVERT(decimal(10,2),OPN_entryAmountCNY),
Tourmanager.dbo.GetSSJEFromSQJE(
OPN_accountMethod,
REPLACE(OPN_currency, 'CNY', 'RMB'),
CONVERT(decimal(10,2),OPN_orderAmount)
)
)
)
) AS this_year_method_total_income
FROM @unique_opn
WHERE OPN_completeTime BETWEEN @this_year AND @to_date
and OPN_noticeType=@type
GROUP BY OPN_accountMethod
) as this_year_cmp on isnull(method.OPN_accountMethod,cmp.last_method)=this_year_cmp.this_year_method
) AS cal
";
// var_dump($this->info->query($sql)); // 无法输出结果集
include('c:/database_conn.php');
$connection = array(
'UID' => $db['HT']['username'],
'PWD' => $db['HT']['password'],
'Database' => 'tourmanager',
'ConnectionPooling' => 1,
'CharacterSet' => 'utf-8',
'ReturnDatesAsStrings' => 1
);
$conn = sqlsrv_connect($db['HT']['hostname'], $connection);
$stmt = sqlsrv_query($conn, $sql);
//每一个select都会产生一个结果集取某个结果集就需要从第一个移动到需要的那个结果集
//如果结果集为空就移到下一个
while (sqlsrv_has_rows($stmt) !== TRUE) {
sqlsrv_next_result($stmt);
}
$result_object = array();
while ($row = sqlsrv_fetch_object($stmt)) {
$result_object[] = $row;
}
sqlsrv_free_stmt($stmt);
sqlsrv_close($conn);
return $result_object;
}
/**
* @uses WxpayService::query
*/
public function add_note_wxpay($result_data, $target_account, $type='pay')
{
$this->load->model('paypal_model', 'account_model');
foreach ($result_data as $key => $row) {
$save_column = array();
$save_column['OPN_accountMethod'] = $this->config->item('method_code', 'wxpay');
$total_fee = bcdiv($row['total_fee'], $this->config->item('currency_unit', 'wxpay'));
$OPN_currency = isset($row['currency_type']) ? $row['currency_type'] : (isset($row['fee_type']) ? $row['fee_type'] : 'CNY');
if ($type != 'pay') {
// 退款
$refund_fee = bcdiv($row['refund_fee'], $this->config->item('currency_unit', 'wxpay'));
$ssje = $this->account_model->get_ssje($refund_fee, str_replace("CNY", "RMB", strtoupper($OPN_currency)), $save_column['OPN_accountMethod']);
$save_column['OPN_transactionId'] = $row['refund_id'];
$save_column['OPN_orderAmount'] = "-" . $refund_fee;
$save_column['OPN_payAmount'] = "-" . $refund_fee;
$save_column['OPN_resultCode'] = $row['refund_status'];
$save_column['OPN_resultMsg'] = $row['refund_status'];
$save_column['OPN_entryAmountCNY'] = floatval("-" . $ssje);
$save_column['OPN_noticeType'] = $type;
$save_column['OPN_relatedId'] = $row['transaction_id'];
$save_column['OPN_acquiringTime'] = date('Y-m-d H:i:s', strtotime($row['refund_success_time']));
$save_column['OPN_completeTime'] = date('Y-m-d H:i:s', strtotime($row['refund_success_time']));
} else {
// 收款
$total_fee = bcdiv($row['total_fee'], $this->config->item('currency_unit', 'wxpay'));
$ssje = $this->account_model->get_ssje($total_fee, str_replace("CNY", "RMB", strtoupper($OPN_currency)), $save_column['OPN_accountMethod']);
$save_column['OPN_transactionId'] = $row['transaction_id'];
$save_column['OPN_orderAmount'] = $total_fee;
$save_column['OPN_payAmount'] = $total_fee;
$save_column['OPN_resultCode'] = $row['trade_state'];
$save_column['OPN_resultMsg'] = $row['trade_state'];
$save_column['OPN_entryAmountCNY'] = floatval($ssje);
$save_column['OPN_noticeType'] = 'pay';
$save_column['OPN_relatedId'] = '';
$save_column['OPN_acquiringTime'] = date('Y-m-d H:i:s', strtotime($row['time_end']));
$save_column['OPN_completeTime'] = date('Y-m-d H:i:s', strtotime($row['time_end']));
}
$save_column['OPN_noticeSendStatus'] = 'unsend';
$save_column['OPN_transactionResult'] = 'completed';
$save_column['OPN_orderId'] = $row['out_trade_no'];
$save_column['OPN_rawOrderId'] = $row['out_trade_no'];
$save_column['OPN_invoiceId'] = $row['out_trade_no'];
$save_column['OPN_subject'] = isset($row['item_name']) ? $row['item_name'] : '';
$save_column['OPN_currency'] = $OPN_currency;
$save_column['OPN_remark'] = empty($row['attach']) ? '' : json_encode($row['attach']);
$save_column['OPN_payerLogId'] = isset( $row['openid']) ? $row['openid'] : '';
$save_column['OPN_fundSource'] = $target_account;
$save_column['OPN_rawContent'] = json_encode($row);
$save_column['OPN_noticeTime'] = date('Y-m-d H:i:s');
// $this->insert_note($save_column) ; // todo:
// log_message('error', 'test: ' . __CLASS__ . PHP_EOL . var_export($save_column, 1));
}
return;
}
/**
*
* $to_online = [
* 'memo' => $pn_memo,
* 'transaction_id' => $pn_txn_id,
* 'invoice_id' => $pn_invoice,
* 'custom_id' => $pn_custom,
* 'pay_amount' => $pn_mc_gross,
* 'pay_currency' => $pn_mc_currency,
* 'net_amount' => $net_amount,
* 'pay_fee' => $post_data->mc_fee,
* 'transaction_status' => 'completed', // $pn_payment_status,
* 'payment_date' => $pn_payment_date,
* 'fund_source' => $pn_receiver_account_name,
* 'fund_type' => $fund_type,
* 'event' => $post_data->event_type,
* 'event_result' => $pn_payment_status,
* 'referer_id' => isset($post_data->parent_txn_id) ? $post_data->parent_txn_id : '',
* ];
*/
public function add_note_paypal($result_data)
{
$this->load->model('paypal_model', 'account_model');
$ssje = $this->account_model->get_ssje_exclude_fee($result_data['net_amount'],'', str_replace("CNY", "RMB", strtoupper($result_data['pay_currency'])));
$save_column = array();
$save_column['OPN_transactionId'] = $result_data['transaction_id'];
$save_column['OPN_orderAmount'] = $result_data['pay_amount'];
$save_column['OPN_payAmount'] = $result_data['pay_amount'];
$save_column['OPN_payFee'] = bcsub(0,$result_data['pay_fee']);
$save_column['OPN_netAmount'] = $result_data['net_amount'];
$save_column['OPN_resultCode'] = $result_data['event_result'];
$save_column['OPN_resultMsg'] = $result_data['event'];
$save_column['OPN_entryAmountCNY'] = floatval($ssje);
$save_column['OPN_noticeType'] = $result_data['fund_type'];
$save_column['OPN_relatedId'] = $result_data['referer_id'];
$save_column['OPN_acquiringTime'] = $result_data['payment_date'];
$save_column['OPN_completeTime'] = $result_data['payment_date'];
$save_column['OPN_accountMethod'] = 15002; // $this->config->item('method_code', 'paypal');
$save_column['OPN_noticeSendStatus'] = 'closed';
$save_column['OPN_transactionResult'] = $result_data['transaction_status'];
$save_column['OPN_orderId'] = $result_data['invoice_id'];
$save_column['OPN_rawOrderId'] = $result_data['invoice_id'];
$save_column['OPN_invoiceId'] = $result_data['invoice_id'];
$save_column['OPN_subject'] = isset($result_data['custom_id']) ? $result_data['custom_id'] : '';
$save_column['OPN_currency'] = $result_data['pay_currency'];
// $save_column['OPN_remark'] = empty($row['attach']) ? '' : json_encode($row['attach']);
// $save_column['OPN_payerLogId'] = isset( $row['openid']) ? $row['openid'] : '';
$save_column['OPN_fundSource'] = $result_data['fund_source'];
$save_column['OPN_rawContent'] = $result_data['memo'];
$save_column['OPN_noticeTime'] = date('Y-m-d H:i:s');
$this->insert_note($save_column) ;
return;
}
}
Loading…
Cancel
Save