wip track payment to user

This commit is contained in:
asus
2024-02-25 11:02:47 +01:00
parent 01187a8450
commit 3d9b9bac9e
5 changed files with 171 additions and 147 deletions

View File

@@ -25,9 +25,7 @@ function handle_orders_request($request_data) {
$json_response = $order_response['json_response'];
$http_status_code = $order_response['http_status_code'];
error_log("--- in handle_orders_request");
update_user_payment($json_response, 'start');
error_log("--- out handle_orders_request");
// Return response
return new WP_REST_Response($json_response, $http_status_code);

View File

@@ -21,9 +21,7 @@ function handle_orders_capture_request($request) {
$http_status_code = $response_data['http_status_code'];
$json_response = $response_data['json_response'];
error_log("--- in handle_orders_capture_request");
update_user_payment($json_response, 'end');
error_log("--- out handle_orders_capture_request");
return new WP_REST_Response($json_response, $http_status_code);
}

View File

@@ -9,104 +9,132 @@ if (!defined('ABSPATH')) {
}
// function check_for_paypal_order_id($user_login, $user)
// {
// $user_id = $user->ID;
// //error_log("--- in check_for_paypal_order_id");
// //error_log("user_id:");
// //error_log($user_id);
//
// // // Save a value in the database
// // update_option('my_custom_option', 'my_value');
// // // Retrieve the value from the database
// // $my_value = get_option('my_custom_option');
//
// }
// add_action('wp_login', 'check_for_paypal_order_id', 10, 2);
/**
* see documentation in private 'paypal.md'
* basically it check if the user who initiate the transaction
* is the same that finish it
*
* add_user_meta('user_id', 'fipf_order_id', 'aaaaaa');
* ['aaaaaa']
* add_user_meta('user_id', 'fipf_order_id', 'bbbbbb');
* ['aaaaaa', 'bbbbbb']
* add_user_meta('user_id', 'fipf_order_id', 'bbbbbb');
* ['aaaaaa', 'bbbbbb', 'bbbbbb']
* get_user_meta('user_id', 'fipf_order_id');
* ['aaaaaa', 'bbbbbb', 'bbbbbb']
* $del_ret = delete_user_meta('user_id', 'fipf_order_id', 'bbbbbb');
* ['aaaaaa'] - $del_ret === true
* $del_ret = delete_user_meta('user_id', 'fipf_order_id', 'bbbbbb');
* ['aaaaaa'] - $del_ret === false
*
*/
function update_user_payment($message, $step)
{
$order_id = $message->id;
/*
"status":"CREATED"
"status":"COMPLETED"
order status : https://developer.paypal.com/docs/api/orders/v2/#orders_capture!c=201&path=status&t=response
CREATED
SAVED
APPROVED ?
VOIDED
- COMPLETED
PAYER_ACTION_REQUIRED
*/
$status = $message->status;
$user_id = get_current_user_id();
//error_log("status :");
//error_log($status);
error_log("--- in update_user_payment, step :");
error_log($step);
error_log("message :");
error_log(json_encode($message));
//error_log("order_id :");
//error_log($order_id);
$user_meta_order_id = get_user_meta($user_id, 'fipf_order_id');
error_log("status :");
error_log($status);
$user_meta_order_id = get_user_meta($user_id, 'fipf_order_id');
error_log("user_meta->fipf_order_id :");
error_log(json_encode($user_meta_order_id));
// $user_meta_ordering = get_user_meta($user_id, 'fipf_ordering', true);
//error_log("user_meta->fipf_ordering :");
//error_log($user_meta_ordering);
error_log("... update user");
// update_user_meta : update or create a user meta field
// https://developer.wordpress.org/reference/functions/update_user_meta/
/*
each time add_meta_user is called with key 'fipf_order_id'
a new value will be added in the array :
- ['aaaaaa']
- add_meta_user('user_id', 'fipf_order_id', 'bbbbbb');
- ['aaaaaa', 'bbbbbb']
- add_meta_user('user_id', 'fipf_order_id', 'bbbbbb');
- ['aaaaaa', 'bbbbbb', 'bbbbbb']
calling get_user_meta with key 'fipf_order_id' will return
the array of values
- get_meta_user('user_id', 'fipf_order_id');
- ['aaaaaa', 'bbbbbb', 'bbbbbb']
calling delete_meta_user with key-value will delete only
the values matching this value
- ['aaaaaa', 'bbbbbb', 'bbbbbb']
- delete_meta_user('user_id', 'fipf_order_id', 'bbbbbb');
- ['aaaaaa']
this allow to track multiple purchase :
if the fields fipf_order_id still have values
it means that purchases have started without finish,
maybe some will finish ?
in this case, what to do ? don't start a second one ?
or at least, don't erase the previous values,
so that the 2 purchase additions ?
-> paypal payment seems to be available for up to 3 days, or 29 days ?
https://developer.paypal.com/sdk/js/reference/#link-actions
*/
if ($step === 'start')
// addind order_id to fipf_order_id meta field
// it can duplicate, it's not a problem : delete_user_meta will delete all
add_user_meta($user_id, 'fipf_order_id', $order_id);
// add a schedule event to delete this order_id
// after 3 days ?
// if transaction is COMPLETED, then delete order_id and update user
if ($status === 'COMPLETED')
{
//update_user_meta($user_id, 'fipf_ordering', true);
//update_user_meta($user_id, 'fipf_order_id', $order_id);
add_user_meta($user_id, 'fipf_order_id', $order_id);
//delete_user_meta($user_id, 'fipf_order_id', '1FA58326FE555261J');
}
else if ($step === 'end')
{
// check if purchase is from the right user
// TODO : what to do if not ?
// propose to contact diego ?
// $user_meta_order_id = get_user_meta($user_id, 'fipf_order_id', true);
// if ($user_meta_order_id !== $order_id)
// return ;
//$user_meta_ordering = get_user_meta($user_id, 'fipf_ordering', true);
//if ($user_meta_ordering !== true)
// return ;
// when purchase is finished, success or not, reinit fipf_order* values
//update_user_meta($user_id, 'fipf_ordering', false);
// update_user_meta($user_id, 'fipf_order_id', '');
// if purchase is success, proceed to validate on user :
// find the user containing the order_id and delete this order_id
$user_id_to_update = delete_order_id($order_id, $user_id);
// proceed to validate payment for user
}
$user_meta_order_id = get_user_meta($user_id, 'fipf_order_id');
// if ($step === 'start')
// {
// add_user_meta($user_id, 'fipf_order_id', $order_id);
// // add a schedule event to delete this order_id after 3 days ?
// }
// else if ($step === 'end')
// {
// // find the user containing the order_id and delete this order_id
// $user_id_to_update = delete_order_id($order_id, $user_id);
// // if purchase is success, proceed to validate on user :
// }
$user_meta_order_id = get_user_meta($user_id, 'fipf_order_id');
error_log("user_meta->fipf_order_id :");
error_log(json_encode($user_meta_order_id));
// $user_meta_ordering = get_user_meta($user_id, 'fipf_ordering', true);
//error_log("user_meta->fipf_ordering :");
//error_log($user_meta_ordering);
$user_meta = get_user_meta($user_id);
error_log("user_meta :");
error_log(json_encode($user_meta));
error_log("--- out update_user_payment");
}
/**
* @return mixed num - user_id
* bool false - if no match found
*/
function delete_order_id($order_id, $current_user_id)
{
$del_ret = delete_user_meta($current_user_id, 'fipf_order_id', $order_id);
if ($del_ret === true)
return $current_user_id;
// it means the current user didn't have this order_id
// so we look for another user
$users = get_users();
foreach ($users as $user)
{
$user_id = $user->ID;
$del_ret = delete_user_meta($user_id, 'fipf_order_id', $order_id);
if ($del_ret === true)
return $user_id;
}
return false;
}
?>