@@ -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