perf: PayPal: 记录 `CHECKOUT.ORDER.APPROVED` 事件

webht/payment
Lei OT 2 weeks ago
parent a74d363bf8
commit e0bd459a52

@ -308,6 +308,8 @@
echo '<span class=text-muted >' . strtoupper($item->OPN_transactionResult) . '</span><br>';
} elseif ($item->OPN_noticeType !== 'pay') {
echo '<span class=text-danger >' . strtoupper($item->OPN_noticeType) . '</span><br>';
} else {
echo '<span class="text-success" >' . strtoupper($item->OPN_transactionResult) . '</span><br>';
} ?>
<div class="flex items-center">
<a href="javascript:void(0);" class="btn btn-sm <?php echo $send_class; ?>" onclick="show_gai_modal('<?php echo $item->OPN_SN; ?>')">

@ -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 {

@ -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;
}

Loading…
Cancel
Save