diff --git a/webht/third_party/paypal/controllers/index.php b/webht/third_party/paypal/controllers/index.php index b3fc4c2f..61158b1b 100644 --- a/webht/third_party/paypal/controllers/index.php +++ b/webht/third_party/paypal/controllers/index.php @@ -583,7 +583,11 @@ class Index extends CI_Controller { $pn_custom = $this->input->post('custom'); empty($pn_custom) ? $pn_custom = '' : false; + $pn_parent_txn_id = $this->input->post('parent_txn_id'); + empty($pn_parent_txn_id) ? $pn_parent_txn_id = '' : false; + $pn_mc_gross = $this->input->post('mc_gross'); + $pn_mc_fee = $this->input->post('mc_fee'); $pn_item_name = $this->input->post('item_name'); if (empty($pn_item_name)) { @@ -602,6 +606,7 @@ class Index extends CI_Controller { $pn_payment_date = $this->input->post('payment_date'); $pn_payer = $this->input->post('first_name') . ' ' . $this->input->post('last_name'); $pn_payer_email = $this->input->post('payer_email'); + $pn_receiver_email = $this->input->post('business'); $post_data = $_POST; $post_data['ipn_time'] = date('Y-m-d H:i:s'); $post_data['notify_time'] = date('Y-m-d H:i:s'); @@ -609,7 +614,7 @@ 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, $pn_item_name, $pn_item_number, $pn_mc_currency, $pn_payment_status, $pn_payer, $pn_payer_email, $pn_payment_date, $pn_memo); + $this->Note_model->save_paypal_note($pn_txn_id, $pn_invoice, $pn_custom, $pn_mc_gross, $pn_mc_fee, $pn_item_name, $pn_item_number, $pn_mc_currency, $pn_payment_status, $pn_payer, $pn_payer_email, $pn_payment_date, $pn_memo, $pn_receiver_email, $pn_parent_txn_id); log_message('error','paypal-note-succeed ' . $pn_txn_id . ' # ' . $pn_invoice); // echo 'ok'; } else { @@ -662,6 +667,7 @@ class Index extends CI_Controller { $pn_mc_currency = ''; $pn_mc_fee = ''; $GAI_API = new stdClass(); + $pn_receiver_account = ''; switch ($post_data->event_type) { case 'PAYMENT.SALE.COMPLETED': $pn_invoice = $post_data->resource->invoice_number; @@ -679,6 +685,7 @@ class Index extends CI_Controller { } $GAI_API->res_links = $post_data->resource->links; $post_data->GAI_API = $GAI_API; + $pn_receiver_account = $GAI_API->payee->email_address; break; case 'PAYMENT.SALE.REFUNDED': $pn_invoice = $post_data->resource->invoice_number; @@ -705,6 +712,7 @@ class Index extends CI_Controller { $GAI_API->payee = $post_data->resource->payee; $GAI_API->res_links = $post_data->resource->links; $post_data->GAI_API = $GAI_API; + $pn_receiver_account = $GAI_API->payee->email_address; break; case 'PAYMENT.CAPTURE.REFUNDED': $pn_invoice = $post_data->resource->invoice_id; @@ -725,6 +733,7 @@ class Index extends CI_Controller { $GAI_API->res_links = $post_data->resource->links; $post_data->GAI_API = $GAI_API; + $pn_receiver_account = $GAI_API->payee->email_address; break; @@ -755,6 +764,7 @@ class Index extends CI_Controller { $pn_invoice, $pn_custom, $pn_mc_gross, + $post_data->mc_fee, "", "", $pn_mc_currency, @@ -762,7 +772,10 @@ class Index extends CI_Controller { "", "", $pn_payment_date, - $pn_memo); + $pn_memo + ,$pn_receiver_account + ,isset($post_data->parent_txn_id) ? $post_data->parent_txn_id : '' + ); log_message('error','paypal-webhook-succeed ' . $pn_txn_id . ' # ' . $pn_invoice); // echo 'ok'; } else { diff --git a/webht/third_party/paypal/models/note_model.php b/webht/third_party/paypal/models/note_model.php index 463828b6..daaa80bf 100644 --- a/webht/third_party/paypal/models/note_model.php +++ b/webht/third_party/paypal/models/note_model.php @@ -42,7 +42,7 @@ class Note_model extends CI_Model { $this->pn_send = " AND (pn_send='sendfail' OR pn_send='') AND pn_payment_status COLLATE SQL_Latin1_General_CP1_CI_AS ='Completed' "; // 1小时前 $date = date("Y-m-d H:i:s", time() - 1800); - $this->search = " AND pn_datetime < '$date' " ; + $this->search = " AND pn_lastedittime < '$date' " ; //$this->orderby = ' ORDER BY pn.pn_sn ASC '; return $this->get_list(); } @@ -53,7 +53,7 @@ class Note_model extends CI_Model { $this->pn_send = " AND (pn_send='sendfail' OR pn_send='') "; // 1小时前 $date = date("Y-m-d H:i:s", time() - 3600); - $this->search = $topnum === 20 ? " AND pn_datetime < '$date' " : ''; + $this->search = $topnum === 20 ? " AND pn_lastedittime < '$date' " : ''; //$this->orderby = ' ORDER BY pn.pn_sn ASC '; return $this->get_list(); } @@ -135,7 +135,7 @@ class Note_model extends CI_Model { OR pn.pn_item_number like '%$search_key%' OR pn.pn_payer like '%$search_key%' OR pn.pn_payer_email like '%$search_key%' - OR SUBSTRING(pn_memo, CHARINDEX('parent_txn_id\"', pn_memo) + 16, 17) = '$search_key' + -- OR SUBSTRING(pn_memo, CHARINDEX('parent_txn_id\"', pn_memo) + 16, 17) = '$search_key' ) "; } $this->search = $search_sql; @@ -143,18 +143,19 @@ class Note_model extends CI_Model { } //存储paypal的实时通知 - public function save_paypal_note($pn_txn_id, $pn_invoice, $pn_custom, $pn_mc_gross, $pn_item_name, $pn_item_number, $pn_mc_currency, $pn_payment_status, $pn_payer, $pn_payer_email, $pn_payment_date, $pn_memo) { + public function save_paypal_note($pn_txn_id, $pn_invoice, $pn_custom, $pn_mc_gross, $pn_mc_fee, $pn_item_name, $pn_item_number, $pn_mc_currency, $pn_payment_status, $pn_payer, $pn_payer_email, $pn_payment_date, $pn_memo, $pn_receiver_account=null, $pn_reference_id=null) { $sql = " INSERT INTO paypal_note ( - pn_txn_id,pn_invoice,pn_custom, pn_mc_gross, pn_item_name, pn_item_number,pn_mc_currency, pn_payment_status,pn_payer,pn_payer_email,pn_payment_date, pn_memo,pn_datetime,pn_send + pn_txn_id,pn_invoice,pn_custom, pn_mc_gross, pn_mc_fee, pn_item_name, pn_item_number,pn_mc_currency, pn_payment_status,pn_payer,pn_payer_email,pn_payment_date, pn_memo, pn_receiver_account, pn_lastedittime, pn_reference_id, + pn_datetime, pn_send ) VALUES ( - ?,N?,N?,?,N?,N?,?,?,N?,N?,?, N?, GETDATE(),'unsend' + ?,N?,N?,?,?,N?,N?,?,?,N?,N?,?, N?, ?, GETDATE(), ?, GETDATE(),'unsend' ) "; - $query = $this->HT->query($sql, array($pn_txn_id, $pn_invoice, $pn_custom, $pn_mc_gross, mb_substr($pn_item_name, 0, 250) , $pn_item_number, $pn_mc_currency, $pn_payment_status, $pn_payer, $pn_payer_email, $pn_payment_date, $pn_memo)); + $query = $this->HT->query($sql, array($pn_txn_id, $pn_invoice, $pn_custom, $pn_mc_gross, $pn_mc_fee, mb_substr($pn_item_name, 0, 250) , $pn_item_number, $pn_mc_currency, $pn_payment_status, $pn_payer, $pn_payer_email, $pn_payment_date, $pn_memo, $pn_receiver_account, $pn_reference_id)); $insertid = $this->HT->last_id('paypal_note'); return $query; } @@ -176,6 +177,7 @@ class Note_model extends CI_Model { ,pn.pn_payer_email ,pn.pn_memo ,pn.pn_datetime + ,pn.pn_lastedittime ,pn.pn_payment_date ,pn.pn_send FROM paypal_note pn @@ -231,7 +233,7 @@ class Note_model extends CI_Model { public function update_send($pn_txn_id, $pn_send, $pn_sn=NULL) { $sql = " UPDATE paypal_note - SET pn_send = ?, pn_datetime=GETDATE() + SET pn_send = ?, pn_lastedittime=GETDATE() WHERE pn_txn_id = ? "; $sql .= ($pn_sn===NULL) ? "" : " and pn_sn=$pn_sn ";