Skip to content

Instantly share code, notes, and snippets.

@gonzalesc
Created January 28, 2025 04:35
Show Gist options
  • Save gonzalesc/30652328b3f915c1379fc5e0d60b50c8 to your computer and use it in GitHub Desktop.
Save gonzalesc/30652328b3f915c1379fc5e0d60b50c8 to your computer and use it in GitHub Desktop.
Create an user Moodle when the payment is completed in WooComerce
<?php
/**
* Payment Complete in WC
*/
add_action( 'woocommerce_payment_complete', 'createMoodleUser' );
/**
* Create Moodle User
* @param int $orderID
* @return void
* @see wp_remote_post
*/
function createMoodleUser( int $orderID ): void {
// Get WC Order
$order = wc_get_order( $orderID );
// Request Moodle User
$moodleUser = [
'email' => $order->get_billing_email(),
'username' => $order->get_billing_email(),
'password' => wp_generate_password( 12, false ),
'firstname' => $order->get_billing_first_name(),
'lastname' => $order->get_billing_last_name(),
'customfields' => [
[
'type' => 'rol',
'value' => 'student'
]
],
];
if ( $order->meta_exists( 'dni' ) ) {
$moodleUser['customfields'][] = [
'type' => 'DNI',
'value' => $order->get_meta( 'dni' )
];
}
// Request Moodle
$moodleApiURL = 'https://tuwebmoodle.com/webservice/rest/server.php';
$moodleToken = '52fcc38e*******************';
$response = wp_remote_post( $moodleApiURL, [
'timeout' => 10,
'body' => [
'wstoken' => $moodleToken,
'wsfunction' => 'core_user_create_users',
'moodlewsrestformat' => 'json',
'users' => [ $moodleUser ]
]
] );
// Response validation
if ( is_wp_error( $response ) ) {
$order->add_order_note(
sprintf(
esc_html__( 'Moodle user creation failed: %s', 'letsgo' ),
$response->get_error_message()
)
);
return;
}
$responseBody = wp_remote_retrieve_body( $response );
$responseData = json_decode( $responseBody, true );
if ( ! empty( $responseData['exception'] ) ) {
$order->add_order_note(
sprintf(
esc_html__( 'Moodle user creation exception (%s) : %s', 'letsgo' ),
$responseData['exception'],
$responseData['message']
)
);
return;
}
// Get the first element
$moodleUserCreated = current( $responseData );
// Success
$order->add_order_note(
sprintf(
esc_html__( 'Moodle user creation success: %s', 'letsgo' ),
$moodleUserCreated['id']
)
);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment