Omnipay を使用して SagePay サーバー統合方法 (サイト外での支払い) を統合する例を誰かが持っていますか? 残念ながら、ドキュメントは少しまばらで、どのメソッドを使用するつもりなのか混乱しています!
これは私のコードです (私は CodeIgniter を使用しています):
use Omnipay\Omnipay;
class Payment_gateway extends CI_Controller {
//live details
private $live_merchant_id = 'xxx';
//test details
private $test_merchant_id = 'yyy';
//payment settings
private $test_mode = TRUE;
private $merchant_id = '';
private $gateway = NULL;
public function __construct()
{
parent::__construct();
if ($this->test_mode) :
$this->merchant_id = $this->test_merchant_id;
else :
$this->merchant_id = $this->live_merchant_id;
endif;
$this->gateway = Omnipay::create('SagePay_Server');
$this->gateway->setVendor($this->merchant_id);
$this->gateway->setTestMode($this->test_mode);
$this->gateway->setSimulatorMode($this->test_mode);
}
public function index()
{
$response = $this->gateway->Purchase();
var_dump($response);
}
}
上記のコードを使用して応答オブジェクトを取得します。私が使用しようとすると:
if ($response->isRedirect()) :
$response->redirect(); // this will automatically forward the customer
else :
// not successful
endif;
代わりにエラーが発生します:
致命的なエラー: 未定義のメソッド Omnipay\SagePay\Message\ServerPurchaseRequest::isRedirect() の呼び出し
私が使用しようとすると:
$response = $this->gateway->Purchase()->send();
特定のパラメーターが必要であるというメッセージが表示されるので、それらを追加すると:
$response = $this->gateway->Purchase(array(
'returnUrl' => 'http://www.madeupdomain.com/',
'amount' => '10.00'
))->send();
エラーが発生します:
カード パラメータは必須です。
私が試してみると:
$response = $this->gateway->completePurchase(array(
'transactionId' => 111,
'transactionReference' => 'Online payment'
))->send();
私は得る:
支払いゲートウェイからの無効な応答
更新: 「カード パラメータが必要です」というエラーを、クレジット カードの詳細を SagePay に渡していないのではなく、completePurchase 関数内でカード配列を渡していないのだと誤解しました。
public function index()
{
$response = $this->gateway->Purchase(array(
'description'=> 'Online order',
'currency'=> 'GBP',
'transactionId'=> mt_rand(99, 9999),
'transactionReference' => 'test order',
'amount'=> '1.00',
'returnUrl' => 'http://www.test.com/returnURL/',
'cancelUrl' => 'http://www.test.com/cancelURL/',
'card' => array(
'email' => 'test@test.com',
'clientIp' => '123.123.123.123',
'firstName' => 'Joe',
'LastName' => 'Bloggs',
'billingAddress1' => 'Address 1',
'billingAddress2' => 'Address 2',
'billingCity' => 'City',
'billingPostcode' => 'AB1 1BA',
'billingCountry' => 'GB',
'billingPhone' => '01234 567 890'
)))->send();
$response = $this->gateway->Purchase($this->params)->send();
if ($response->isRedirect()) {
$response->redirect();
} else {
echo '<pre> ';
var_dump($response);
echo '</pre> ';
exit;
}
}
これにより、まったく新しい問題が発生しますが、正しい機能を使用していると思います。