1. Go to this page and download the library: Download getsafepay/sfpy-php library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
getsafepay / sfpy-php example snippets
$safepay = new \Safepay\SafepayClient('BQokikJOvBiI2HlWgH4olfQ2');
$tracker = $safepay->order->setup([
"merchant_api_key" => "sec_8dcac601-4b70-442d-b198-03aadd28f12b",
"intent" => "CYBERSOURCE",
"mode" => "payment",
"currency" => "PKR",
"amount" => 600000 // in the lowest denomination
]);
echo $tracker;
$safepay = new \Safepay\SafepayClient('BQokikJOvBiI2HlWgH4olfQ2');
try {
// You need to generate a tracker with mode 'instrument'
// to tell Safepay that you wish to set up a tracker to
// tokenize a customer's card
$session = $safepay->order->setup([
"merchant_api_key" => "sec_8dcac601-4b70-442d-b198-03aadd28f12b",
"intent" => "CYBERSOURCE",
"mode" => "instrument",
"currency" => "PKR"
]);
// You need to either create a customer or retreive the customer
// from your backend so you have access to the customer ID
$customer = $safepay->customer->create([
"first_name" => "Hassan",
"last_name" => "Zaidi",
"email" => "[email protected]",
"phone_number" => "+923331234567",
"country" => "PK"
]);
// You can optionally create an address object if you have
// access to the customer's billing details
$address = $safepay->address->create([
//
$safepay = new \Safepay\SafepayClient('BQokikJOvBiI2HlWgH4olfQ2');
try {
// Change this ID to reflect the ID of the Plan you have created
// either through the merchant dashboard or through the API.
$plan_id = "plan_d4869a78-0036-4d66-97bd-6afeb5282bcd";
// You need to create a Time Based Authentication token
$tbt = $safepay->passport->create();
// To ease reconciliation, you may associate a reference
// that you generate in your system. This will be returned
// in webhooks received when the subscription is created.
$reference = "0950fa13-1a28-4529-80bf-89f6f4e830a5";
// Finally, you can create the Subscribe URL
$subscribeURL = \Safepay\SubscriptionsCheckout::constructURL([
"environment" => "production", // one of "development", "sandbox" or "production"
"plan_id" => $plan_id,
"tbt" => $tbt,
"reference" => $reference,
"cancel_url" => "https://mywebiste.com/subscribe/cancel",
"redirect_url" => "https://mywebiste.com/subscribe/success",
]);
echo($subscribeURL);
return $subscribeURL;
} catch(\UnexpectedValueException $e) {
// Invalid payload
http_response_code(400);
exit();
}
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\Log;
Route::post('/sfpy-webhook', function (Request $request) {
// You can find your shared webhook secret in the Developer
// section of the Safepay dashboard under the Endpoints tab
$webhook_secret = '8c3f108cb9ba794799d9f7693eb9f59e6c52aad7249e4838c9da2ad8f962ea04';
// Retrieve the signature from the request header
if (! $request->hasHeader('X-SFPY-SIGNATURE')) {
return response('Missing signature', 400);
}
$signature = $request->header('X-SFPY-SIGNATURE');
// Get the payload
$payload = json_encode($request->input(), JSON_UNESCAPED_SLASHES);
// Verify the signature
$event = null;
try {
$event = \Safepay\Webhook::constructEvent($payload, $signature, $webhook_secret);
} catch(\UnexpectedValueException $e) {
Log::error($e);
return response('error parsing payload', 400);
} catch(\Safepay\Exception\SignatureVerificationException $e) {
Log::error($e);
return response('Error verifying webhook signature', 400);
}
// Handle the webhook event
switch ($event->type) {
case 'payment.succeeded':
$payment = $event->data;
// Your code goes here. You may want to mark this payment as complete in your database.
break;
case 'payment.failed':
$payment = $event->data;
// Your code goes here. You may want to mark this payment as failed in your database.
break;
// Handle other event types
default:
break;
}
return response('Ok', 200);
});
bash
composer
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.