diff --git a/config/payment.php b/config/payment.php index 49f1592..2195533 100644 --- a/config/payment.php +++ b/config/payment.php @@ -1,5 +1,33 @@ \App\Models\User::class, + + /** + * The default gateway + */ + 'default' => 'orange_ci', + + /** + * List of available gateway + */ + 'gateways' => [ + 'orange_ci' => [ + 'client_key' => '', + 'merchant_key' => '' + ], + + 'mtn_ci' => [ + 'client_key' => '', + 'merchant_key' => '' + ], + + 'moov_ci' => [ + 'client_key' => '', + 'merchant_key' => '' + ] + ] ]; diff --git a/src/Bowcasher.php b/src/Bowcasher.php new file mode 100644 index 0000000..936305e --- /dev/null +++ b/src/Bowcasher.php @@ -0,0 +1,40 @@ +container->make('payment', function ($config) { - return Pay::configure($config['payment']); + return Bowcasher::configure($config['payment']); }); } diff --git a/src/Common/PaymentManagerContract.php b/src/Common/PaymentManagerContract.php new file mode 100644 index 0000000..c91576a --- /dev/null +++ b/src/Common/PaymentManagerContract.php @@ -0,0 +1,61 @@ +environment = PaymentManagerContract::PRODUCTION; + } + + /** + * Switch to development mode + * + * @return string + */ + public function switchToDevelopment() + { + $this->environment = PaymentManagerContract::DEVELOPMENT; + } + + /** + * Get the payment environment + * + * @param string $environment + * @return string + */ + public function getEnvironment() + { + return $this->environment; + } +} diff --git a/src/Common/PaymentToken.php b/src/Common/PaymentToken.php index dd04924..0b71e57 100644 --- a/src/Common/PaymentToken.php +++ b/src/Common/PaymentToken.php @@ -24,13 +24,13 @@ class PaymentToken * @var int */ private $expires_in; - + /** - * Define the realy time for token expiration + * Define the really time for token expiration * * @var int */ - private $expires_realy_in; + private $expires_really_in; /** * PaymentToken constructor @@ -47,7 +47,7 @@ public function __construct(string $access_token, string $token_type, int $expir $this->expires_in = $expires_in; - $this->expires_realy_in = (time() + $expires_in) - 5; + $this->expires_really_in = (time() + $expires_in) - 5; } /** @@ -97,6 +97,6 @@ public function getExpiresIn() */ public function hasExpired() { - return $this->expires_realy_in - time() <= 0; + return $this->expires_really_in - time() <= 0; } } diff --git a/src/Common/TokenGeneratorContract.php b/src/Common/TokenGeneratorContract.php new file mode 100644 index 0000000..ae7fa20 --- /dev/null +++ b/src/Common/TokenGeneratorContract.php @@ -0,0 +1,40 @@ +subscription_key = $subscription_key; $this->basic_auth = $basic_auth; @@ -111,7 +111,7 @@ public function getBaseUri() * * @return array */ - public function getAuthorzition() + public function getAuthorization() { return [ 'Authorization' => 'Basic ' . $this->basic_auth, diff --git a/src/OrangeMoney/BowcasherOrangeMoneyService.php b/src/OrangeMoney/BowcasherOrangeMoneyService.php new file mode 100644 index 0000000..b0cfc7f --- /dev/null +++ b/src/OrangeMoney/BowcasherOrangeMoneyService.php @@ -0,0 +1,105 @@ +config = $config; + } + + /** + * Make payment + * + * @return void + */ + public function pay(...$args) + { + $token_generator = $this->getTokenGenerator(); + + $payment = new OrangeMoneyPayment( + $token_generator->getToken(), + $this->config['merchant_key'] + ); + + // Set the right production endpoint + if ($this->getEnvironment() == PaymentManagerContract::PRODUCTION) { + $payment->setPaymentEndpoint('/orange-money-webpay/v1/webpayment'); + } + + $payment->setNotifyUrl($args['notif_url']); + $payment->setCancelUrl($args['cancel_url']); + $payment->setReturnUrl($args['return_url']); + + $amount = $args['amount']; + $order_id = $args['order_id']; + $reference = $args['reference']; + + $orange = $payment->prepare($amount, $order_id, $reference); + $payment_information = $orange->getPaymentInformation(); + + // Redirect to payment plateforme + $orange->pay(); + } + + /** + * Verify payment + * + * @param array ...$args + * @return TransactionStatusContract + */ + public function verify(...$args) + { + $token_generator = $this->getTokenGenerator(); + // Transaction status + $transaction = new OrangeMoneyTransaction($token_generator->getToken()); + + // Set the production url + if ($this->getEnvironment() == PaymentManagerContract::PRODUCTION) { + $transaction->setTransactionStatusEndpoint('/orange-money-webpay/v1/transactionstatus'); + } + + $amount = $args['amount']; + $order_id = $args['order_id']; + $reference = $args['reference']; + + // Check the transaction status + return $transaction->check($amount, $order_id, $reference); + } + + /** + * Create the Token Generator instance + * + * @return OrangeMoneyTokenGenerator + */ + private function getTokenGenerator() + { + $token_generator = new OrangeMoneyTokenGenerator($this->config['client_key']); + + // Set the right production endpoint + if ($this->getEnvironment() == PaymentManagerContract::PRODUCTION) { + $token_generator->setTokenGeneratorEndpoint('/oauth/v2/token'); + } + + return $token_generator; + } +} + \ No newline at end of file diff --git a/src/OrangeMoney/OrangeMoneyPayment.php b/src/OrangeMoney/OrangeMoneyPayment.php index bae1e32..f8f1a5b 100644 --- a/src/OrangeMoney/OrangeMoneyPayment.php +++ b/src/OrangeMoney/OrangeMoneyPayment.php @@ -50,14 +50,14 @@ class OrangeMoneyPayment private $notif_url; /** - * The merchand id + * The merchant id * * @var string */ private $merchant_key; /** - * OrangeMoney contructor + * OrangeMoney constructor * * @param OrangeMoneyToken $token * @param string $merchant_key @@ -166,12 +166,12 @@ public function setPaymentEndpoint($url) } /** - * Set the merchand id + * Set the merchant id * * @param string $merchant_key * @return mixed */ - public function setMerchandId(string $merchant_key) + public function setMerchantId(string $merchant_key) { $this->merchant_key = $merchant_key; } diff --git a/src/OrangeMoney/OrangeMoneyTokenGenerator.php b/src/OrangeMoney/OrangeMoneyTokenGenerator.php index 554cadf..524c58e 100644 --- a/src/OrangeMoney/OrangeMoneyTokenGenerator.php +++ b/src/OrangeMoney/OrangeMoneyTokenGenerator.php @@ -3,9 +3,10 @@ namespace Bow\Payment\OrangeMoney; use Bow\Payment\Common\PaymentToken as OrangeMoneyToken; +use Bow\Payment\Common\TokenGeneratorContract; use \GuzzleHttp\Client as HttpClient; -class OrangeMoneyTokenGenerator +class OrangeMoneyTokenGenerator implements TokenGeneratorContract { /** * HTTP client instance @@ -29,7 +30,7 @@ class OrangeMoneyTokenGenerator private $key; /** - * OrangeMoney contructor + * OrangeMoney constructor * * @param string $key * @return mixed @@ -96,7 +97,7 @@ public function setTokenGeneratorEndpoint(string $url) * @param string $key * @return mixed */ - public function setClientKey($key) + public function setCredentials($key) { $this->key = $key; } diff --git a/src/OrangeMoney/OrangeMoneyTransaction.php b/src/OrangeMoney/OrangeMoneyTransaction.php index 9014e2d..e58b01f 100644 --- a/src/OrangeMoney/OrangeMoneyTransaction.php +++ b/src/OrangeMoney/OrangeMoneyTransaction.php @@ -47,7 +47,7 @@ public function __construct(OrangeMoneyToken $token) * @param string $endpoint * @return mixed */ - public function setTransactinStatusUrl($endpoint) + public function setTransactionStatusUrl($endpoint) { $this->endpoint = $endpoint; } @@ -108,7 +108,7 @@ public function checkIfHasPending($amount, string $order_id, string $pay_token) } /** - * Check the payment have successed + * Check the payment have success * * @param string $order_id * @param int|double $amount diff --git a/src/OrangeMoney/OrangeMoneyTransactionStatus.php b/src/OrangeMoney/OrangeMoneyTransactionStatus.php index 015ab65..a808ff8 100644 --- a/src/OrangeMoney/OrangeMoneyTransactionStatus.php +++ b/src/OrangeMoney/OrangeMoneyTransactionStatus.php @@ -2,7 +2,9 @@ namespace Bow\Payment\OrangeMoney; -class OrangeMoneyTransactionStatus +use Bow\Payment\Common\TransactionStatusContract; + +class OrangeMoneyTransactionStatus implements TransactionStatusContract { /** * Define the transaction status diff --git a/src/Pay.php b/src/Pay.php deleted file mode 100644 index 222ecdd..0000000 --- a/src/Pay.php +++ /dev/null @@ -1,14 +0,0 @@ -