Last active
December 10, 2016 03:20
-
-
Save recca0120/e18d8d992c5e3e7eff5d56d0bb34f909 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
use Mockery as m; | |
use PayumTW\Allpay\Api; | |
class ApiTest extends PHPUnit_Framework_TestCase | |
{ | |
public function tearDown() | |
{ | |
m::close(); | |
} | |
public function test_create_transaction() | |
{ | |
/* | |
|------------------------------------------------------------ | |
| Set | |
|------------------------------------------------------------ | |
*/ | |
$options = [ | |
'MerchantID' => '2000132', | |
'HashKey' => '5294y06JbISpM5x9', | |
'HashIV' => 'v77hoKGq4kWxNNIS', | |
'sandbox' => false, | |
]; | |
$params = [ | |
'ReturnURL' => 'http://www.allpay.com.tw/receive.php', | |
'MerchantTradeNo' => 'Test'.time(), | |
'MerchantTradeDate' => date('Y/m/d H:i:s'), | |
'TotalAmount' => 2000, | |
'TradeDesc' => 'good to drink', | |
'ChoosePayment' => PaymentMethod::ALL, | |
'Items' => [ | |
[ | |
'Name' => '歐付寶黑芝麻豆漿', | |
'Price' => 2000, | |
'Currency' => '元', | |
'Quantity' => 1, | |
'URL' => 'dedwed', | |
], | |
], | |
]; | |
$httpClient = m::mock('Payum\Core\HttpClientInterface'); | |
$message = m::mock('Http\Message\MessageFactory'); | |
/* | |
|------------------------------------------------------------ | |
| Expectation | |
|------------------------------------------------------------ | |
*/ | |
$api = new Api($options, $httpClient, $message); | |
/* | |
|------------------------------------------------------------ | |
| Assertion | |
|------------------------------------------------------------ | |
*/ | |
$params = $api->createTransaction($params); | |
$this->assertSame(CheckMacValue::generate($params, $options['HashKey'], $options['HashIV'], 0), $params['CheckMacValue']); | |
$this->assertSame('https://payment.allpay.com.tw/Cashier/AioCheckOut/V2', $api->getApiEndpoint()); | |
} | |
public function test_get_transaction_data() | |
{ | |
/* | |
|------------------------------------------------------------ | |
| Set | |
|------------------------------------------------------------ | |
*/ | |
$options = [ | |
'MerchantID' => '2000132', | |
'HashKey' => '5294y06JbISpM5x9', | |
'HashIV' => 'v77hoKGq4kWxNNIS', | |
'sandbox' => false, | |
]; | |
$params = [ | |
'response' => [ | |
'MerchantID' => '2000132', | |
'MerchantTradeNo' => '57CBC66A39F82', | |
'PayAmt' => '340', | |
'PaymentDate' => '2016/09/04 15:03:08', | |
'PaymentType' => 'Credit_CreditCard', | |
'PaymentTypeChargeFee' => '3', | |
'RedeemAmt' => '0', | |
'RtnCode' => '1', | |
'RtnMsg' => 'Succeeded', | |
'SimulatePaid' => '0', | |
'TradeAmt' => '340', | |
'TradeDate' => '2016/09/04 14:59:13', | |
'TradeNo' => '1609041459136128', | |
'CheckMacValue' => '6812D213BF2C5B9377EBF101607BF2DF', | |
], | |
]; | |
$httpClient = m::mock('Payum\Core\HttpClientInterface'); | |
$message = m::mock('Http\Message\MessageFactory'); | |
/* | |
|------------------------------------------------------------ | |
| Expectation | |
|------------------------------------------------------------ | |
*/ | |
$api = new Api($options, $httpClient, $message); | |
/* | |
|------------------------------------------------------------ | |
| Assertion | |
|------------------------------------------------------------ | |
*/ | |
$params = $api->getTransactionData($params); | |
$expected = [ | |
'response' => [ | |
'MerchantID' => '2000132', | |
'MerchantTradeNo' => '57CBC66A39F82', | |
'PayAmt' => '340', | |
'PaymentDate' => '2016/09/04 15:03:08', | |
'PaymentType' => 'Credit_CreditCard', | |
'PaymentTypeChargeFee' => '3', | |
'RedeemAmt' => '0', | |
'RtnCode' => '1', | |
'RtnMsg' => 'Succeeded', | |
'SimulatePaid' => '0', | |
'TradeAmt' => '340', | |
'TradeDate' => '2016/09/04 14:59:13', | |
'TradeNo' => '1609041459136128', | |
'CheckMacValue' => '6812D213BF2C5B9377EBF101607BF2DF', | |
'statusReason' => '成功', | |
], | |
]; | |
foreach ($expected['response'] as $key => $value) { | |
$this->assertSame($value, $params[$key]); | |
} | |
$this->assertSame('https://payment.allpay.com.tw/Cashier/AioCheckOut/V2', $api->getApiEndpoint()); | |
} | |
public function test_parse_result_fail() | |
{ | |
/* | |
|------------------------------------------------------------ | |
| Set | |
|------------------------------------------------------------ | |
*/ | |
$options = [ | |
'MerchantID' => '2000132', | |
'HashKey' => '5294y06JbISpM5x9', | |
'HashIV' => 'v77hoKGq4kWxNNIS', | |
'sandbox' => false, | |
]; | |
$params = [ | |
'response' => [ | |
'MerchantID' => '2000132', | |
'MerchantTradeNo' => '57CBC66A39F82', | |
'PayAmt' => '340', | |
'PaymentDate' => '2016/09/04 15:03:08', | |
'PaymentType' => 'Credit_CreditCard', | |
'PaymentTypeChargeFee' => '3', | |
'RedeemAmt' => '0', | |
'RtnCode' => '1', | |
'RtnMsg' => 'Succeeded', | |
'SimulatePaid' => '0', | |
'TradeAmt' => '340', | |
'TradeDate' => '2016/09/04 14:59:13', | |
'TradeNo' => '1609041459136128', | |
'CheckMacValue' => '6812D213BF2C5B9377EBF101607BFEEE', | |
], | |
]; | |
$httpClient = m::mock('Payum\Core\HttpClientInterface'); | |
$message = m::mock('Http\Message\MessageFactory'); | |
/* | |
|------------------------------------------------------------ | |
| Expectation | |
|------------------------------------------------------------ | |
*/ | |
$api = new Api($options, $httpClient, $message); | |
/* | |
|------------------------------------------------------------ | |
| Assertion | |
|------------------------------------------------------------ | |
*/ | |
$result = $api->getTransactionData($params); | |
$this->assertSame('10400002', $result['RtnCode']); | |
} | |
public function test_sandbox() | |
{ | |
/* | |
|------------------------------------------------------------ | |
| Set | |
|------------------------------------------------------------ | |
*/ | |
$options = [ | |
'MerchantID' => '2000132', | |
'HashKey' => '5294y06JbISpM5x9', | |
'HashIV' => 'v77hoKGq4kWxNNIS', | |
'sandbox' => true, | |
]; | |
$params = [ | |
]; | |
$httpClient = m::mock('Payum\Core\HttpClientInterface'); | |
$message = m::mock('Http\Message\MessageFactory'); | |
/* | |
|------------------------------------------------------------ | |
| Expectation | |
|------------------------------------------------------------ | |
*/ | |
$api = new Api($options, $httpClient, $message); | |
/* | |
|------------------------------------------------------------ | |
| Assertion | |
|------------------------------------------------------------ | |
*/ | |
$this->assertSame('https://payment-stage.allpay.com.tw/Cashier/AioCheckOut/V2', $api->getApiEndpoint()); | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
use Mockery as m; | |
use PayumTW\Allpay\Api; | |
class ApiTest extends PHPUnit_Framework_TestCase | |
{ | |
public function tearDown() | |
{ | |
m::close(); | |
} | |
public function test_create_transaction() | |
{ | |
/* | |
|------------------------------------------------------------ | |
| Arrange | |
|------------------------------------------------------------ | |
*/ | |
$httpClient = m::spy('Payum\Core\HttpClientInterface'); | |
$message = m::spy('Http\Message\MessageFactory'); | |
$sdk = m::spy('PayumTW\Allpay\Bridge\Allpay\AllInOne'); | |
$sdk->Send = [ | |
'ReturnURL' => '', | |
'ClientBackURL' => '', | |
'OrderResultURL' => '', | |
'MerchantTradeNo' => '', | |
'MerchantTradeDate' => '', | |
'PaymentType' => 'aio', | |
'TotalAmount' => '', | |
'TradeDesc' => '', | |
'ChoosePayment' => PaymentMethod::ALL, | |
'Remark' => '', | |
'ChooseSubPayment' => PaymentMethodItem::None, | |
'NeedExtraPaidInfo' => ExtraPaymentInfo::No, | |
'DeviceSource' => '', | |
'IgnorePayment' => '', | |
'PlatformID' => '', | |
'InvoiceMark' => InvoiceState::No, | |
'Items' => [], | |
'EncryptType' => EncryptType::ENC_MD5, | |
'UseRedeem' => UseRedeem::No, | |
]; | |
$options = [ | |
'MerchantID' => '2000132', | |
'HashKey' => '5294y06JbISpM5x9', | |
'HashIV' => 'v77hoKGq4kWxNNIS', | |
'sandbox' => false, | |
]; | |
$params = [ | |
'ReturnURL' => 'http://www.allpay.com.tw/receive.php', | |
'MerchantTradeNo' => 'Test'.time(), | |
'MerchantTradeDate' => date('Y/m/d H:i:s'), | |
'TotalAmount' => 2000, | |
'TradeDesc' => 'good to drink', | |
'ChoosePayment' => PaymentMethod::ALL, | |
'Items' => [ | |
[ | |
'Name' => '歐付寶黑芝麻豆漿', | |
'Price' => 2000, | |
'Currency' => '元', | |
'Quantity' => 1, | |
'URL' => 'dedwed', | |
], | |
], | |
]; | |
/* | |
|------------------------------------------------------------ | |
| Act | |
|------------------------------------------------------------ | |
*/ | |
$api = new Api($options, $httpClient, $message, $sdk); | |
/* | |
|------------------------------------------------------------ | |
| Assert | |
|------------------------------------------------------------ | |
*/ | |
$api->createTransaction($params); | |
$this->assertSame($options['HashKey'], $sdk->HashKey); | |
$this->assertSame($options['HashIV'], $sdk->HashIV); | |
$this->assertSame($options['MerchantID'], $sdk->MerchantID); | |
$this->assertSame($api->getApiEndpoint('AioCheckOut'), $sdk->ServiceURL); | |
$this->assertSame($params['ReturnURL'], $sdk->Send['ReturnURL']); | |
$sdk->shouldHaveReceived('CheckOut')->once(); | |
} | |
public function test_cancel_transaction() | |
{ | |
/* | |
|------------------------------------------------------------ | |
| Arrange | |
|------------------------------------------------------------ | |
*/ | |
$httpClient = m::spy('Payum\Core\HttpClientInterface'); | |
$message = m::spy('Http\Message\MessageFactory'); | |
$sdk = m::spy('PayumTW\Allpay\Bridge\Allpay\AllInOne'); | |
$sdk->Action = [ | |
'MerchantTradeNo' => '', | |
'TradeNo' => '', | |
'Action' => ActionType::C, | |
'TotalAmount' => 0, | |
]; | |
$options = [ | |
'MerchantID' => '2000132', | |
'HashKey' => '5294y06JbISpM5x9', | |
'HashIV' => 'v77hoKGq4kWxNNIS', | |
'sandbox' => false, | |
]; | |
$params = [ | |
'MerchantTradeNo' => '12345', | |
'TradeNo' => '12345', | |
'TotalAmount' => 0, | |
]; | |
/* | |
|------------------------------------------------------------ | |
| Act | |
|------------------------------------------------------------ | |
*/ | |
$api = new Api($options, $httpClient, $message, $sdk); | |
/* | |
|------------------------------------------------------------ | |
| Assert | |
|------------------------------------------------------------ | |
*/ | |
$api->cancelTransaction($params); | |
$this->assertSame($options['HashKey'], $sdk->HashKey); | |
$this->assertSame($options['HashIV'], $sdk->HashIV); | |
$this->assertSame($options['MerchantID'], $sdk->MerchantID); | |
$this->assertSame($api->getApiEndpoint('DoAction'), $sdk->ServiceURL); | |
$this->assertSame($params['MerchantTradeNo'], $sdk->Action['MerchantTradeNo']); | |
$this->assertSame($params['TradeNo'], $sdk->Action['TradeNo']); | |
$this->assertSame($params['TotalAmount'], $sdk->Action['TotalAmount']); | |
$sdk->shouldHaveReceived('DoAction')->once(); | |
} | |
public function test_refund_transaction() | |
{ | |
/* | |
|------------------------------------------------------------ | |
| Arrange | |
|------------------------------------------------------------ | |
*/ | |
$httpClient = m::spy('Payum\Core\HttpClientInterface'); | |
$message = m::spy('Http\Message\MessageFactory'); | |
$sdk = m::spy('PayumTW\Allpay\Bridge\Allpay\AllInOne'); | |
$sdk->ChargeBack = [ | |
'MerchantTradeNo' => '', | |
'TradeNo' => '', | |
'ChargeBackTotalAmount' => 0, | |
'Remark' => '', | |
]; | |
$options = [ | |
'MerchantID' => '2000132', | |
'HashKey' => '5294y06JbISpM5x9', | |
'HashIV' => 'v77hoKGq4kWxNNIS', | |
'sandbox' => false, | |
]; | |
$params = [ | |
'MerchantTradeNo' => '12345', | |
'TradeNo' => '12345', | |
'ChargeBackTotalAmount' => 0, | |
'Remark' => '', | |
]; | |
/* | |
|------------------------------------------------------------ | |
| Act | |
|------------------------------------------------------------ | |
*/ | |
$api = new Api($options, $httpClient, $message, $sdk); | |
/* | |
|------------------------------------------------------------ | |
| Assert | |
|------------------------------------------------------------ | |
*/ | |
$api->refundTransaction($params); | |
$this->assertSame($options['HashKey'], $sdk->HashKey); | |
$this->assertSame($options['HashIV'], $sdk->HashIV); | |
$this->assertSame($options['MerchantID'], $sdk->MerchantID); | |
$this->assertSame($api->getApiEndpoint('AioChargeback'), $sdk->ServiceURL); | |
$this->assertSame($params['MerchantTradeNo'], $sdk->ChargeBack['MerchantTradeNo']); | |
$this->assertSame($params['TradeNo'], $sdk->ChargeBack['TradeNo']); | |
$this->assertSame($params['ChargeBackTotalAmount'], $sdk->ChargeBack['ChargeBackTotalAmount']); | |
$sdk->shouldHaveReceived('AioChargeback')->once(); | |
} | |
public function test_get_transaction_data_when_response_from_request() | |
{ | |
/* | |
|------------------------------------------------------------ | |
| Arrange | |
|------------------------------------------------------------ | |
*/ | |
$httpClient = m::spy('Payum\Core\HttpClientInterface'); | |
$message = m::spy('Http\Message\MessageFactory'); | |
$sdk = m::spy('PayumTW\Allpay\Bridge\Allpay\AllInOne'); | |
$sdk->ChargeBack = [ | |
'MerchantTradeNo' => '', | |
'TradeNo' => '', | |
'ChargeBackTotalAmount' => 0, | |
'Remark' => '', | |
]; | |
$options = [ | |
'MerchantID' => '2000132', | |
'HashKey' => '5294y06JbISpM5x9', | |
'HashIV' => 'v77hoKGq4kWxNNIS', | |
'sandbox' => false, | |
]; | |
$params = [ | |
'response' => [ | |
'MerchantID' => '2000132', | |
'MerchantTradeNo' => '57CBC66A39F82', | |
'PayAmt' => '340', | |
'PaymentDate' => '2016/09/04 15:03:08', | |
'PaymentType' => 'Credit_CreditCard', | |
'PaymentTypeChargeFee' => '3', | |
'RedeemAmt' => '0', | |
'RtnCode' => '1', | |
'RtnMsg' => 'Succeeded', | |
'SimulatePaid' => '0', | |
'TradeAmt' => '340', | |
'TradeDate' => '2016/09/04 14:59:13', | |
'TradeNo' => '1609041459136128', | |
'CheckMacValue' => '6812D213BF2C5B9377EBF101607BF2DF', | |
], | |
]; | |
/* | |
|------------------------------------------------------------ | |
| Act | |
|------------------------------------------------------------ | |
*/ | |
$api = new Api($options, $httpClient, $message, $sdk); | |
/* | |
|------------------------------------------------------------ | |
| Assert | |
|------------------------------------------------------------ | |
*/ | |
$this->assertSame($params['response'], $api->getTransactionData($params)); | |
$this->assertSame($options['HashKey'], $sdk->HashKey); | |
$this->assertSame($options['HashIV'], $sdk->HashIV); | |
$this->assertSame($options['MerchantID'], $sdk->MerchantID); | |
} | |
public function test_get_transaction_data_when_response_from_request_and_verify_hash_is_fail() | |
{ | |
/* | |
|------------------------------------------------------------ | |
| Arrange | |
|------------------------------------------------------------ | |
*/ | |
$httpClient = m::spy('Payum\Core\HttpClientInterface'); | |
$message = m::spy('Http\Message\MessageFactory'); | |
$sdk = m::spy('PayumTW\Allpay\Bridge\Allpay\AllInOne'); | |
$sdk->ChargeBack = [ | |
'MerchantTradeNo' => '', | |
'TradeNo' => '', | |
'ChargeBackTotalAmount' => 0, | |
'Remark' => '', | |
]; | |
$options = [ | |
'MerchantID' => '2000132', | |
'HashKey' => '5294y06JbISpM5x9', | |
'HashIV' => 'v77hoKGq4kWxNNIS', | |
'sandbox' => false, | |
]; | |
$params = [ | |
'response' => [ | |
'MerchantID' => '2000132', | |
'MerchantTradeNo' => '57CBC66A39F82', | |
'PayAmt' => '340', | |
'PaymentDate' => '2016/09/04 15:03:08', | |
'PaymentType' => 'Credit_CreditCard', | |
'PaymentTypeChargeFee' => '3', | |
'RedeemAmt' => '0', | |
'RtnCode' => '1', | |
'RtnMsg' => 'Succeeded', | |
'SimulatePaid' => '0', | |
'TradeAmt' => '340', | |
'TradeDate' => '2016/09/04 14:59:13', | |
'TradeNo' => '1609041459136128', | |
'CheckMacValue' => '', | |
], | |
]; | |
/* | |
|------------------------------------------------------------ | |
| Act | |
|------------------------------------------------------------ | |
*/ | |
$sdk->shouldReceive('CheckOutFeedback')->andThrow('Exception'); | |
$api = new Api($options, $httpClient, $message, $sdk); | |
/* | |
|------------------------------------------------------------ | |
| Assert | |
|------------------------------------------------------------ | |
*/ | |
$this->assertSame([ | |
'RtnCode' => '10400002', | |
], $api->getTransactionData($params)); | |
$this->assertSame($options['HashKey'], $sdk->HashKey); | |
$this->assertSame($options['HashIV'], $sdk->HashIV); | |
$this->assertSame($options['MerchantID'], $sdk->MerchantID); | |
$sdk->shouldHaveReceived('CheckOutFeedback')->once(); | |
} | |
public function test_get_transaction_data_when_response_from_query_info() | |
{ | |
/* | |
|------------------------------------------------------------ | |
| Arrange | |
|------------------------------------------------------------ | |
*/ | |
$httpClient = m::spy('Payum\Core\HttpClientInterface'); | |
$message = m::spy('Http\Message\MessageFactory'); | |
$sdk = m::spy('PayumTW\Allpay\Bridge\Allpay\AllInOne'); | |
$sdk->Query = [ | |
'MerchantTradeNo' => '', | |
'TimeStamp' => '', | |
]; | |
$options = [ | |
'MerchantID' => '2000132', | |
'HashKey' => '5294y06JbISpM5x9', | |
'HashIV' => 'v77hoKGq4kWxNNIS', | |
'sandbox' => false, | |
]; | |
$params = [ | |
'MerchantTradeNo' => '5832985816073', | |
]; | |
/* | |
|------------------------------------------------------------ | |
| Act | |
|------------------------------------------------------------ | |
*/ | |
$api = new Api($options, $httpClient, $message, $sdk); | |
/* | |
|------------------------------------------------------------ | |
| Assert | |
|------------------------------------------------------------ | |
*/ | |
$api->getTransactionData($params); | |
$this->assertSame($options['HashKey'], $sdk->HashKey); | |
$this->assertSame($options['HashIV'], $sdk->HashIV); | |
$this->assertSame($options['MerchantID'], $sdk->MerchantID); | |
$this->assertSame($api->getApiEndpoint('QueryTradeInfo'), $sdk->ServiceURL); | |
$sdk->shouldHaveReceived('QueryTradeInfo')->once(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment