Skip to content

Commit ea4d4b9

Browse files
committed
Bug fixes
1 parent 30b3252 commit ea4d4b9

1 file changed

Lines changed: 108 additions & 22 deletions

File tree

class.pmprogateway_paystack.php

Lines changed: 108 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ function kkd_pmpro_paystack_ipn() {
124124
}
125125
switch($event->event){
126126
case 'subscription.create':
127+
127128
break;
128129
case 'subscription.disable':
129130
break;
@@ -395,6 +396,10 @@ static function pmpro_pages_shortcode_confirmation($content,$reference = null) {
395396
{
396397
$morder = $pmpro_invoice;
397398
if ($morder->code == $_REQUEST['trxref']) {
399+
$pmpro_level = $wpdb->get_row("SELECT * FROM $wpdb->pmpro_membership_levels WHERE id = '" . (int)$morder->membership_id . "' LIMIT 1");
400+
$pmpro_level = apply_filters("pmpro_checkout_level", $pmpro_level);
401+
$startdate = apply_filters("pmpro_checkout_start_date", "'" . current_time("mysql") . "'", $morder->user_id, $pmpro_level);
402+
398403
$mode = pmpro_getOption("gateway_environment");
399404
if ($mode == 'sandbox') {
400405
$key = pmpro_getOption("paystack_tsk");
@@ -413,22 +418,98 @@ static function pmpro_pages_shortcode_confirmation($content,$reference = null) {
413418
$request = wp_remote_get( $paystack_url, $args );
414419
if( ! is_wp_error( $request ) && 200 == wp_remote_retrieve_response_code( $request ) ) {
415420
$paystack_response = json_decode( wp_remote_retrieve_body( $request ) );
416-
if ( 'success' == $paystack_response->data->status ) {
417-
421+
if ( 'success' == $paystack_response->data->status && $pmpro_level->initial_payment == ($paystack_response->data->amount/100)) {
422+
$customer_code = $paystack_response->data->customer->customer_code;
418423

419-
$pmpro_level = $wpdb->get_row("SELECT * FROM $wpdb->pmpro_membership_levels WHERE id = '" . (int)$morder->membership_id . "' LIMIT 1");
420-
$pmpro_level = apply_filters("pmpro_checkout_level", $pmpro_level);
421-
$startdate = apply_filters("pmpro_checkout_start_date", "'" . current_time("mysql") . "'", $morder->user_id, $pmpro_level);
422-
$startdate = apply_filters("pmpro_checkout_start_date", "'" . current_time("mysql") . "'", $user_id, $pmpro_level);
423-
if (strlen($order->subscription_transaction_id) > 3)
424-
{
424+
if (strlen($order->subscription_transaction_id) > 3) {
425425
$enddate = "'" . date("Y-m-d", strtotime("+ " . $order->subscription_transaction_id, current_time("timestamp"))) . "'";
426-
}
427-
elseif (!empty($pmpro_level->expiration_number)) {
426+
}elseif (!empty($pmpro_level->expiration_number)) {
428427
$enddate = "'" . date("Y-m-d", strtotime("+ " . $pmpro_level->expiration_number . " " . $pmpro_level->expiration_period, current_time("timestamp"))) . "'";
429428
} else {
430429
$enddate = "NULL";
431430
}
431+
if (($pmpro_level->cycle_number > 0) && ($pmpro_level->billing_amount > 0) && ($pmpro_level->cycle_period != "")) {
432+
if ($pmpro_level->cycle_number < 10 && $pmpro_level->cycle_period == 'Day') {
433+
$interval = 'weekly';
434+
}elseif(($pmpro_level->cycle_number > 10) && ($pmpro_level->cycle_period == 'Day')){
435+
$interval = 'monthly';
436+
437+
}elseif(($pmpro_level->cycle_number > 0) && ($pmpro_level->cycle_period == 'Month')){
438+
$interval = 'monthly';
439+
440+
}elseif(($pmpro_level->cycle_number > 0) && ($pmpro_level->cycle_period == 'Year')){
441+
$interval = 'annually';
442+
443+
}
444+
$amount = $pmpro_level->billing_amount;
445+
$koboamount = $amount*100;
446+
//Create Plan
447+
$paystack_url = 'https://api.paystack.co/plan';
448+
$subscription_url = 'https://api.paystack.co/subscription';
449+
$check_url = 'https://api.paystack.co/plan?amount='.$koboamount.'&interval='.$interval;
450+
$headers = array(
451+
'Content-Type' => 'application/json',
452+
'Authorization' => 'Bearer ' . $key
453+
);
454+
455+
$checkargs = array(
456+
'headers' => $headers,
457+
'timeout' => 60
458+
);
459+
// Check if plan exist
460+
$checkrequest = wp_remote_get( $check_url, $checkargs );
461+
if(!is_wp_error($checkrequest)) {
462+
$response = json_decode(wp_remote_retrieve_body($checkrequest));
463+
if ($response->meta->total >= 1) {
464+
$plan = $response->data[0];
465+
$plancode = $plan->plan_code;
466+
467+
}else{
468+
//Create Plan
469+
$body = array(
470+
'name' => '('.number_format($amount).') - '.$interval.' - ['.$pmpro_level->cycle_number.' - '.$pmpro_level->cycle_period.']' ,
471+
'amount' => $koboamount,
472+
'interval' => $interval
473+
);
474+
$args = array(
475+
'body' => json_encode( $body ),
476+
'headers' => $headers,
477+
'timeout' => 60
478+
);
479+
480+
$request = wp_remote_post( $paystack_url, $args );
481+
if( ! is_wp_error( $request )) {
482+
$paystack_response = json_decode(wp_remote_retrieve_body($request));
483+
$plancode = $paystack_response->data->plan_code;
484+
}
485+
}
486+
487+
}
488+
$body = array(
489+
'customer' => $customer_code,
490+
'plan' => $plancode
491+
);
492+
$args = array(
493+
'body' => json_encode($body),
494+
'headers' => $headers,
495+
'timeout' => 60
496+
);
497+
498+
$request = wp_remote_post($subscription_url, $args);
499+
if( ! is_wp_error( $request )) {
500+
$paystack_response = json_decode(wp_remote_retrieve_body($request));
501+
$subscription_code = $paystack_response->data->subscription_code;
502+
$token = $paystack_response->data->email_token;
503+
$morder->subscription_transaction_id = $subscription_code;
504+
$morder->subscription_token = $token;
505+
506+
507+
}
508+
509+
}
510+
//
511+
// die();
512+
432513
$custom_level = array(
433514
'user_id' => $morder->user_id,
434515
'membership_id' => $pmpro_level->id,
@@ -442,14 +523,19 @@ static function pmpro_pages_shortcode_confirmation($content,$reference = null) {
442523
'trial_limit' => $pmpro_level->trial_limit,
443524
'startdate' => $startdate,
444525
'enddate' => $enddate);
445-
446-
if (pmpro_changeMembershipLevel($custom_level, $morder->user_id, 'changed')){
447-
$morder->status = "success";
448-
$morder->membership_id = $pmpro_level->id;
449-
$morder->payment_transaction_id = $_REQUEST['trxref'];
450-
$morder->saveOrder();
526+
if ($morder->status != 'success') {
527+
528+
if (pmpro_changeMembershipLevel($custom_level, $morder->user_id, 'changed')){
529+
$morder->membership_id = $pmpro_level->id;
530+
$morder->payment_transaction_id = $_REQUEST['trxref'];
531+
$morder->status = "success";
532+
$morder->saveOrder();
533+
}
534+
451535
}
452-
536+
// echo "<pre>";
537+
// print_r($morder);
538+
// die();
453539
//setup some values for the emails
454540
if (!empty($morder)) {
455541
$pmpro_invoice = new MemberOrder($morder->id);
@@ -465,12 +551,12 @@ static function pmpro_pages_shortcode_confirmation($content,$reference = null) {
465551
}
466552

467553
//send email to member
468-
// $pmproemail = new PMProEmail();
469-
// $pmproemail->sendCheckoutEmail($current_user, $invoice);
554+
$pmproemail = new PMProEmail();
555+
$pmproemail->sendCheckoutEmail($current_user, $invoice);
470556

471-
// //send email to admin
472-
// $pmproemail = new PMProEmail();
473-
// $pmproemail->sendCheckoutAdminEmail($current_user, $invoice);
557+
//send email to admin
558+
$pmproemail = new PMProEmail();
559+
$pmproemail->sendCheckoutAdminEmail($current_user, $invoice);
474560
// echo "<pre>";
475561
// print_r($pmpro_level);
476562
$content = "<ul>

0 commit comments

Comments
 (0)