diff --git a/webht/third_party/pay/views/payment_list.php b/webht/third_party/pay/views/payment_list.php
index 8bd3d16f..7f931c10 100644
--- a/webht/third_party/pay/views/payment_list.php
+++ b/webht/third_party/pay/views/payment_list.php
@@ -308,6 +308,8 @@
echo '' . strtoupper($item->OPN_transactionResult) . '
';
} elseif ($item->OPN_noticeType !== 'pay') {
echo '' . strtoupper($item->OPN_noticeType) . '
';
+ } else {
+ echo '' . strtoupper($item->OPN_transactionResult) . '
';
} ?>
diff --git a/webht/third_party/paypal/controllers/index.php b/webht/third_party/paypal/controllers/index.php
index bd3d290e..6638866b 100644
--- a/webht/third_party/paypal/controllers/index.php
+++ b/webht/third_party/paypal/controllers/index.php
@@ -648,6 +648,7 @@ class Index extends CI_Controller {
&& strpos($post_data->event_type, 'REFUNDED') === false
&& strpos($post_data->event_type, 'PAYMENT.CAPTURE.DECLINED') === false
&& strpos($post_data->event_type, 'PAYMENT.SALE.REVERSED') === false
+ && strpos($post_data->event_type, 'CHECKOUT.ORDER.APPROVED') === false
) {
return;
}
@@ -671,6 +672,7 @@ class Index extends CI_Controller {
$tp_payee->merchant = "trippest";
$pn_txn_id = $post_data->resource->id;
+ $save_to_pn = true;
$pn_invoice = '';
$pn_custom = '';
@@ -683,6 +685,15 @@ class Index extends CI_Controller {
$fund_type = 'pay';
$net_amount = '';
$transaction_status = '';
+
+ $payer_id = '';
+ $payer_name = '';
+ $payer_email = '';
+ $payer_state = '';
+ $payment_type = '';
+ $remark = '';
+ $notice_status = '';
+
switch ($post_data->event_type) {
case 'PAYMENT.SALE.COMPLETED': // todo: PAYMENT.SALE.DENIED
$fund_type = 'pay';
@@ -779,6 +790,39 @@ class Index extends CI_Controller {
// $pn_receiver_account_name = $pn_receiver_account===$default_payee->email_address ? $default_payee->merchant : $tp_payee->merchant;
$pn_receiver_account_name = $this->fundsource_map($pn_receiver_account)->merchant;
+ break;
+ case 'CHECKOUT.ORDER.APPROVED':
+ $save_to_pn = false;
+ $fund_type = 'paypal.order';
+ $notice_status = 'closed';
+
+ $paypal_order = $post_data->resource->purchase_units[0];
+ $pn_invoice = $paypal_order->invoice_id;
+ $pn_custom = isset($paypal_order->custom_id) ? $paypal_order->custom_id : '';
+ $pn_mc_gross = $paypal_order->amount->value;
+ $pn_mc_currency = $paypal_order->amount->currency_code;
+ $pn_payment_status = 'APPROVED'; // $post_data->resource->status;
+ $transaction_status = strtolower($pn_payment_status); // $post_data->resource->status;
+
+ $payment = isset($paypal_order->payments) ? $paypal_order->payments->captures[0] : new stdClass();
+ $post_data->mc_fee = isset($payment->seller_receivable_breakdown) ? $payment->seller_receivable_breakdown->paypal_fee->value : 0;
+ $net_amount = isset($payment->seller_receivable_breakdown) ? $payment->seller_receivable_breakdown->net_amount->value : $pn_mc_gross;
+ $post_data->parent_txn_id = isset($payment->id) ? $payment->id : ''; // refer_id
+
+ $remark = $paypal_order->description;
+
+ $pn_receiver_account = $paypal_order->payee->email_address;
+ $pn_receiver_account_name = $this->fundsource_map($pn_receiver_account)->merchant;
+
+ $payer_id = $post_data->resource->payer->payer_id;
+ $payer_name = $post_data->resource->payer->name->given_name . ' ' . $post_data->resource->payer->name->surname;
+ $payer_email = $post_data->resource->payer->email_address;
+ $paymentSource = get_object_vars($post_data->resource->payment_source);
+ reset($paymentSource);
+ $payment_type = key($paymentSource);
+ // $payment_type = array_key_first($paymentSource);
+ $payer_state = $payment_type == 'paypal' ? strtolower($paymentSource[$payment_type]->account_status) : '';
+
break;
default: // capture COMPLETED
@@ -795,7 +839,7 @@ class Index extends CI_Controller {
// $pn_mc_gross = '-' . $post_data->resource->amount->total;
// $post_data->parent_txn_id = $post_data->resource->sale_id;
// }
- $pn_payment_date = $post_data->resource->update_time;
+ $pn_payment_date = isset($post_data->resource->update_time) ? $post_data->resource->update_time : $post_data->resource->create_time;
// $pn_payer = $post_data->resource->amount->currency;
// $pn_payer_email = $post_data->resource->amount->currency;
$post_data->notify_time = date('Y-m-d H:i:s');
@@ -803,23 +847,25 @@ class Index extends CI_Controller {
if (!empty($pn_txn_id)) {
//把PDT时间转成GMT时间
$pn_payment_date = gmdate('Y-m-d H:i:s', strtotime($pn_payment_date));
- $this->Note_model->save_paypal_note(
- $pn_txn_id,
- $pn_invoice,
- $pn_custom,
- $pn_mc_gross,
- $post_data->mc_fee,
- "",
- "",
- $pn_mc_currency,
- $pn_payment_status,
- "",
- "",
- $pn_payment_date,
- $pn_memo
- ,$pn_receiver_account
- ,isset($post_data->parent_txn_id) ? $post_data->parent_txn_id : ''
- );
+ if ($save_to_pn) {
+ $this->Note_model->save_paypal_note(
+ $pn_txn_id,
+ $pn_invoice,
+ $pn_custom,
+ $pn_mc_gross,
+ $post_data->mc_fee,
+ "",
+ "",
+ $pn_mc_currency,
+ $pn_payment_status,
+ "",
+ "",
+ $pn_payment_date,
+ $pn_memo
+ ,$pn_receiver_account
+ ,isset($post_data->parent_txn_id) ? $post_data->parent_txn_id : ''
+ );
+ }
log_message('error','paypal-webhook-succeed ' . $pn_payment_status . ' ' . $pn_txn_id . ' # ' . $pn_invoice);
// echo 'ok';
$to_online = [
@@ -838,6 +884,14 @@ class Index extends CI_Controller {
'event' => $post_data->event_type,
'event_result' => $pn_payment_status,
'referer_id' => isset($post_data->parent_txn_id) ? $post_data->parent_txn_id : '',
+
+ 'payer_id' => $payer_id,
+ 'payer_name' => $payer_name,
+ 'payer_email' => $payer_email,
+ 'payment_type' => $payment_type,
+ 'payer_state' => $payer_state,
+ 'remark' => $remark,
+ 'notice_status' => $notice_status,
];
$this->online_note->add_note_paypal($to_online);
} else {
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 6378a87e..5c01db0c 100644
--- a/webht/third_party/paypal/models/Online_payment_note_model.php
+++ b/webht/third_party/paypal/models/Online_payment_note_model.php
@@ -584,7 +584,6 @@ class Online_payment_note_model extends CI_Model {
$save_column['OPN_completeTime'] = $localSqlDateTime;
$save_column['OPN_accountMethod'] = 15002; // $this->config->item('method_code', 'paypal');
- $save_column['OPN_noticeSendStatus'] = '';
$save_column['OPN_transactionResult'] = $result_data['transaction_status'];
$save_column['OPN_orderId'] = $result_data['invoice_id'];
$save_column['OPN_rawOrderId'] = $result_data['invoice_id'];
@@ -596,6 +595,16 @@ class Online_payment_note_model extends CI_Model {
$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');
+
+ $save_column['OPN_noticeSendStatus'] = isset($result_data['notice_status']) ? $result_data['notice_status'] : '';
+
+ $save_column['OPN_payerLogId'] = isset($result_data['payer_id']) ? $result_data['payer_id'] : null;
+ $save_column['OPN_payerName'] = isset($result_data['payer_name']) ? $result_data['payer_name'] : null;
+ $save_column['OPN_payerEmail'] = isset($result_data['payer_email']) ? $result_data['payer_email'] : null;
+ $save_column['OPN_payerStatus'] = isset($result_data['payer_state']) ? $result_data['payer_state'] : null;
+ $save_column['OPN_remark'] = isset($result_data['remark']) ? $result_data['remark'] : null;
+ $save_column['OPN_paymentSource'] = isset($result_data['payment_type']) ? $result_data['payment_type'] : null;
+
$this->insert_note($save_column, true) ;
return;
}