AlipayProvider   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 45
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 6

Importance

Changes 0
Metric Value
dl 0
loc 45
c 0
b 0
f 0
wmc 5
lcom 0
cbo 6
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A getBankInfoByCardNo() 0 17 3
A mapInfoToObject() 0 13 1
A getBankIcon() 0 4 1
1
<?php
2
3
namespace Sco\Bankcard\Providers;
4
5
use Sco\Bankcard\BankName;
6
use Sco\Bankcard\CardType;
7
use Sco\Bankcard\Exceptions\HttpException;
8
use Sco\Bankcard\Exceptions\ValidationException;
9
use Sco\Bankcard\Info;
10
11
class AlipayProvider extends AbstractProvider
12
{
13
    /**
14
     * @inheritdoc
15
     */
16
    protected function getBankInfoByCardNo($cardNo)
17
    {
18
        $url = "https://ccdcapi.alipay.com/validateAndCacheCardInfo.json"
19
            . "?_input_charset=utf-8&cardNo={$cardNo}&cardBinCheck=true";
20
21
        $content = file_get_contents($url);
22
        if (!$content) {
23
            throw new HttpException();
24
        }
25
26
        $bankInfo = json_decode($content, true);
27
        if (!$bankInfo['validated']) {
28
            throw new ValidationException();
29
        }
30
31
        return $bankInfo;
32
    }
33
34
    /**
35
     * @inheritdoc
36
     */
37
    protected function mapInfoToObject(array $bankInfo)
38
    {
39
        $bankCode  = $this->arrayItem($bankInfo, 'bank');
40
        $cardType = $this->arrayItem($bankInfo, 'cardType');
41
42
        return new Info([
43
            'bankCode' => $bankCode,
44
            'bankName' => BankName::get($bankCode),
45
            'bankIcon' => $this->getBankIcon($bankCode),
46
            'cardType' => $cardType,
47
            'cardTypeName' => CardType::get($cardType),
48
        ]);
49
    }
50
51
    protected function getBankIcon($bankCode)
52
    {
53
        return "https://apimg.alipay.com/combo.png?d=cashier&t={$bankCode}";
54
    }
55
}
56