diff --git a/webht/third_party/pay/views/payment_list.php b/webht/third_party/pay/views/payment_list.php
index eb6f5051..666770d4 100644
--- a/webht/third_party/pay/views/payment_list.php
+++ b/webht/third_party/pay/views/payment_list.php
@@ -46,8 +46,11 @@
.unknown-color{ background-color: #999999;}
/* .text-completed {color: #00CC00;} */
- .text-pending {color: #ff9900;}
+ /* .text-pending {color: #ff9900;} */
+ .text-pending {color: #00A2E8;}
.text-declined {color: #a94442;}
+ .text-under_review {color: #ff9900;}
+ .text-resolved {color: #ff9900;}
.text-approved {color: #777;}
.flex {display: flex;}
@@ -168,19 +171,19 @@
Payment List
class="text-muted"
- href="'all')) ?>">ALL
+ href="'','method'=>'all')) ?>">ALL
 │ 
class="text-muted"
- href="15016)) ?>">微信»
+ href="'','method'=>15016)) ?>">微信»
 
class="text-muted"
- href="15002)) ?>">PayPal»
+ href="'','method'=>15002)) ?>">PayPal»
 
class="text-muted"
- href="'15018,15035')) ?>">信用卡»
+ href="'','method'=>'15018,15035')) ?>">信用卡»
 
class="text-muted"
- href="15015)) ?>">支付宝»
+ href="'','method'=>15015)) ?>">支付宝»
 
│ 
diff --git a/webht/third_party/paypal/controllers/index.php b/webht/third_party/paypal/controllers/index.php
index a8c7d7f0..0292f1c5 100644
--- a/webht/third_party/paypal/controllers/index.php
+++ b/webht/third_party/paypal/controllers/index.php
@@ -643,25 +643,15 @@ class Index extends CI_Controller {
log_message('error',"paypal_webhook" . var_export($raw_post, 1));
$post_data = json_decode($raw_post);
log_message('error','paypal_webhook: ' . $post_data->event_type);
- if (
- strpos($post_data->event_type, 'COMPLETED') === false
- && strpos($post_data->event_type, 'REFUNDED') === false
- && strpos($post_data->event_type, 'PAYMENT.CAPTURE.REVERSED') === false
- && strpos($post_data->event_type, 'PAYMENT.CAPTURE.DECLINED') === false
- && strpos($post_data->event_type, 'PAYMENT.CAPTURE.PENDING') === false
- && strpos($post_data->event_type, 'PAYMENT.SALE.REVERSED') === false
- && strpos($post_data->event_type, 'CHECKOUT.ORDER.APPROVED') === false
- ) {
+ if ( ! in_array($post_data->event_type, [
+ 'PAYMENT.CAPTURE.REVERSED','PAYMENT.CAPTURE.DECLINED','PAYMENT.CAPTURE.PENDING',
+ 'PAYMENT.CAPTURE.COMPLETED','PAYMENT.CAPTURE.REFUNDED',
+ 'CHECKOUT.ORDER.APPROVED',
+ 'CUSTOMER.DISPUTE.UPDATED','CUSTOMER.DISPUTE.RESOLVED',
+ 'PAYMENT.SALE.COMPLETED','PAYMENT.SALE.REFUNDED','PAYMENT.SALE.REVERSED',
+ ])) {
return;
}
- if ($post_data->event_type === 'PAYMENT-NETWORKS.ALTERNATIVE-PAYMENT.COMPLETED') {
- return ;
- }
- // todo: CUSTOMER.DISPUTE.CREATED
- // if ($post_data->event_type != 'PAYMENT.SALE.COMPLETED' && $post_data->event_type != 'PAYMENT.SALE.REFUNDED') {
- // log_message('error',"paypal_webhook" . var_export($raw_post, 1));
- // return;
- // }
$default_payee = new stdClass();
$default_payee->email_address = "pays@chinahighlights.com";
@@ -673,7 +663,7 @@ class Index extends CI_Controller {
$tp_payee->merchant_id = "5FUTQ9SU5P7CJ";
$tp_payee->merchant = "trippest";
- $pn_txn_id = $post_data->resource->id;
+ $pn_txn_id = isset($post_data->resource->id) ? $post_data->resource->id : '';
$save_to_pn = true;
$pn_invoice = '';
@@ -827,6 +817,36 @@ class Index extends CI_Controller {
// $payment_type = array_key_first($paymentSource);
$payer_state = $payment_type == 'paypal' ? strtolower($paymentSource[$payment_type]->account_status) : '';
+ break;
+ case 'CUSTOMER.DISPUTE.UPDATED':
+ case 'CUSTOMER.DISPUTE.RESOLVED':
+ $save_to_pn = false;
+ $fund_type = 'paypal.dispute';
+ $notice_status = $post_data->event_type === 'CUSTOMER.DISPUTE.UPDATED' ? 'sendfail' : 'closed';
+ $pn_txn_id = $post_data->resource->dispute_id;
+
+ $transactions = $post_data->resource->disputed_transactions[0];
+ $transaction_id = $transactions->seller_transaction_id;
+ $post_data->parent_txn_id = !empty($transaction_id) ? $transaction_id : ''; // refer_id
+
+ $pn_invoice = isset($transactions->invoice_number) ? $transactions->invoice_number : '';
+ // $pn_custom = isset($transactions->custom) ? $transactions->custom : '';
+ $dispute_amount = $post_data->resource->dispute_amount;
+ $pn_mc_gross = $dispute_amount->value;
+ $pn_mc_currency = $dispute_amount->currency_code;
+ $net_amount = $pn_mc_gross;
+ $pn_payment_status = $post_data->resource->status;
+ $transaction_status = strtolower($pn_payment_status);
+
+ // subject
+ $pn_custom = $post_data->resource->dispute_life_cycle_stage . "." . $post_data->resource->reason;
+ $remark = "[{$pn_custom}] " . (isset($post_data->resource->messages[0]) ? $post_data->resource->messages[0]->content : '');
+
+ $pn_receiver_account_id = $transactions->seller->merchant_id;
+ $seller = $this->fundsource_map('', $pn_receiver_account_id);
+ $pn_receiver_account_name = $seller->merchant;
+ $pn_receiver_account = $seller->email_address;
+
break;
default: // capture COMPLETED
@@ -880,13 +900,13 @@ class Index extends CI_Controller {
'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,
+ 'pay_fee' => isset($post_data->mc_fee) ? $post_data->mc_fee : 0,
+ 'transaction_status' => $transaction_status, // $pn_payment_status, OPN_transactionResult
'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,
+ 'event_result' => $pn_payment_status, // OPN_resultCode
'referer_id' => isset($post_data->parent_txn_id) ? $post_data->parent_txn_id : '',
'payer_id' => $payer_id,
@@ -2254,7 +2274,7 @@ class Index extends CI_Controller {
}
- private function fundsource_map($pn_receiver_account) {
+ private function fundsource_map($pn_receiver_account, $pn_receiver_account_id = null) {
$default_payee = new stdClass();
$default_payee->email_address = "pays@chinahighlights.com";
$default_payee->merchant_id = "JE4VX9SSVGTVN";
@@ -2278,7 +2298,20 @@ class Index extends CI_Controller {
"ycc@hainatravel.com" => "dev",
"0" => "unknown",
);
- $find = isset($fundsource[$pn_receiver_account]) ? $fundsource[$pn_receiver_account] : $default_payee;
+ $fundsource_id = array(
+ "BUTDAQXCYBPTA" => $htravel_payee, // business":"pay@trippest.com"
+ "5FUTQ9SU5P7CJ" => $tp_payee, // business":"pay@trippest.com"
+ "JE4VX9SSVGTVN" => $default_payee, // "CHT",
+ "JE4VX9SSVGTVN" => $default_payee, // "CHT",
+ // "ycc@hainatravel.com" => "dev",
+ // "0" => "unknown",
+ );
+ if ($pn_receiver_account_id) {
+ $find = isset($fundsource_id[$pn_receiver_account_id]) ? $fundsource_id[$pn_receiver_account_id] : $default_payee;
+ }
+ if ($pn_receiver_account) {
+ $find = isset($fundsource[$pn_receiver_account]) ? $fundsource[$pn_receiver_account] : $default_payee;
+ }
return $find;
}
}
diff --git a/webht/third_party/paypal/models/Online_payment_note_model.php b/webht/third_party/paypal/models/Online_payment_note_model.php
index 5c01db0c..61ae8b03 100644
--- a/webht/third_party/paypal/models/Online_payment_note_model.php
+++ b/webht/third_party/paypal/models/Online_payment_note_model.php
@@ -34,9 +34,9 @@ class Online_payment_note_model extends CI_Model {
return false;
}
if ($check_exists === true) {
- $sql = "SELECT TOP 1 OPN_SN
+ $sql = "SELECT TOP 1 OPN_SN,OPN_transactionResult
FROM OnlinePaymentNote
- WHERE OPN_accountMethod={$column['OPN_accountMethod']} AND OPN_transactionId = '{$column['OPN_transactionId']}'";
+ WHERE OPN_accountMethod={$column['OPN_accountMethod']} AND OPN_transactionId = '{$column['OPN_transactionId']}' AND OPN_resultMsg = '{$column['OPN_resultMsg']}' ";
$query = $this->info->query($sql);
if ($query->num_rows() > 0) {
$update = array(
@@ -44,6 +44,12 @@ class Online_payment_note_model extends CI_Model {
'OPN_netAmount' => $column['OPN_netAmount'],
'OPN_entryAmountCNY' => $column['OPN_entryAmountCNY'],
);
+ if ($query->row()->OPN_transactionResult !== $column['OPN_transactionResult']) {
+ $update['OPN_transactionResult'] = $column['OPN_transactionResult'];
+ $update['OPN_resultCode'] = $column['OPN_resultCode'];
+ $update['OPN_rawContent'] = $column['OPN_rawContent'];
+ $update['OPN_completeTime'] = $column['OPN_completeTime'];
+ }
$where = " OPN_SN=" . $query->row()->OPN_SN;
$this->update_note($where, $update);
return false;