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