alipay_global 0.0.4 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/alipay_global.rb +1 -0
- data/lib/alipay_global/service/settlement.rb +75 -0
- data/lib/alipay_global/service/trade.rb +0 -2
- data/lib/alipay_global/version.rb +1 -1
- data/test/service/settlement_test.rb +72 -0
- metadata +6 -3
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 7e25a163c6a105f882363330ab4c883b76dcd9cc
         | 
| 4 | 
            +
              data.tar.gz: d87038772fa03ac173230766ea799f3a4d801938
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 4203de1fbf2710247b042217ba1021c88614a38218f26eb18c20cfcf7b1cad31d6169ef7ffcab73ef8746509b543f8f4eab5998c1f2872b21d3583fd89a17f47
         | 
| 7 | 
            +
              data.tar.gz: 47c2678c31ef89aacaca21fd6535ff2ffd67278b490409e307771747d1d275c9a6ba42f9c3a9f4383d3faf82b6a3ab92a5f29c7c071d34fa67d5df1fda520c64
         | 
    
        data/lib/alipay_global.rb
    CHANGED
    
    
| @@ -0,0 +1,75 @@ | |
| 1 | 
            +
            require 'open-uri'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module AlipayGlobal
         | 
| 4 | 
            +
              module Service
         | 
| 5 | 
            +
                module Settlement
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                  RequestError = Class.new(RuntimeError)
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                  SETTLEMENT_REQUIRED_PARAMS = %w( start_date end_date )
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                  SETTLEMENT_ERROR_MESSAGES = [
         | 
| 12 | 
            +
                    "Over 10 days to Date period",
         | 
| 13 | 
            +
                    "Over limit balance amount record",
         | 
| 14 | 
            +
                    "System exception",
         | 
| 15 | 
            +
                    "No balance amount data in the period",
         | 
| 16 | 
            +
                    "<alipay><is_success>F</is_success><error>ILLEGAL_PARTNER</error></alipay>",
         | 
| 17 | 
            +
                    "Finish date not ahead of today",
         | 
| 18 | 
            +
                    "Finish date ahead of begin date",
         | 
| 19 | 
            +
                    "Illegal Date period!",
         | 
| 20 | 
            +
                    "Date format incorrect YYYYMMDD",
         | 
| 21 | 
            +
                    "Internet connected exception ,please try later"
         | 
| 22 | 
            +
                  ]
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                  def self.request(params)
         | 
| 25 | 
            +
                    settlement_resp = []
         | 
| 26 | 
            +
                    open(build_request(params)) do |data|
         | 
| 27 | 
            +
                      results = data.read
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                      return false if results.include? "No balance account data in the period"
         | 
| 30 | 
            +
                      raise RequestError, "#{results}" if error_check(results)
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                      results.each_line do |line|
         | 
| 33 | 
            +
                        transaction = line.strip.split("|")
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                        settlement_resp << {
         | 
| 36 | 
            +
                          partner_transaction_id: transaction[0],
         | 
| 37 | 
            +
                          amount: transaction[1],
         | 
| 38 | 
            +
                          currency: transaction[2],
         | 
| 39 | 
            +
                          payment_time: valid_alipay_date(transaction[3]) ? DateTime.strptime(transaction[3],"%Y%m%d%H%M%S") : '',
         | 
| 40 | 
            +
                          settlement_time: valid_alipay_date(transaction[4]) ? DateTime.strptime(transaction[4],"%Y%m%d%H%M%S") : '',
         | 
| 41 | 
            +
                          transaction_type: transaction[5],
         | 
| 42 | 
            +
                          service_charge: transaction[6],
         | 
| 43 | 
            +
                          status: transaction[7],
         | 
| 44 | 
            +
                          remarks: transaction[8] ? transaction[8] : ''
         | 
| 45 | 
            +
                        }
         | 
| 46 | 
            +
                      end
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                    end
         | 
| 49 | 
            +
                    settlement_resp
         | 
| 50 | 
            +
                  end
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                  def self.build_request(params)
         | 
| 53 | 
            +
                    AlipayGlobal::Service.check_required_params(params, SETTLEMENT_REQUIRED_PARAMS)
         | 
| 54 | 
            +
             | 
| 55 | 
            +
                    params = AlipayGlobal::Utils.stringify_keys(params)
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                    params = {
         | 
| 58 | 
            +
                      'service'         => 'forex_liquidation_file',
         | 
| 59 | 
            +
                      'partner'         => AlipayGlobal.api_partner_id,
         | 
| 60 | 
            +
                    }.merge(params)
         | 
| 61 | 
            +
             | 
| 62 | 
            +
                    AlipayGlobal::Service.request_uri(params).to_s
         | 
| 63 | 
            +
                  end
         | 
| 64 | 
            +
             | 
| 65 | 
            +
                  def self.error_check(data)
         | 
| 66 | 
            +
                    SETTLEMENT_ERROR_MESSAGES.any? { |w| data =~ /#{w}/ }
         | 
| 67 | 
            +
                  end
         | 
| 68 | 
            +
             | 
| 69 | 
            +
                  def self.valid_alipay_date(raw_date)
         | 
| 70 | 
            +
                    raw_date && raw_date.length > 0
         | 
| 71 | 
            +
                  end
         | 
| 72 | 
            +
                  
         | 
| 73 | 
            +
                end
         | 
| 74 | 
            +
              end
         | 
| 75 | 
            +
            end
         | 
| @@ -84,8 +84,6 @@ module AlipayGlobal | |
| 84 84 | 
             
                    alipay_resp = Nokogiri::XML(resp.body)
         | 
| 85 85 |  | 
| 86 86 | 
             
                    alipay_results = alipay_resp.at_xpath('//alipay')
         | 
| 87 | 
            -
                    #puts "success   = " + alipay_results.at_xpath('//is_success').content
         | 
| 88 | 
            -
                    #puts "error = " + alipay_results.at_xpath('//error').content
         | 
| 89 87 |  | 
| 90 88 | 
             
                    file.unlink
         | 
| 91 89 | 
             
                  end
         | 
| @@ -0,0 +1,72 @@ | |
| 1 | 
            +
            require 'test_config'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe "AlipayGlobal::Service::Settlement", "Settlement request check" do
         | 
| 4 | 
            +
              
         | 
| 5 | 
            +
              before do
         | 
| 6 | 
            +
                @alipay = AlipayGlobal
         | 
| 7 | 
            +
                @alipay.api_partner_id = '2088101122136241'
         | 
| 8 | 
            +
                @alipay.api_secret_key = '760bdzec6y9goq7ctyx96ezkz78287de'
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                @params = {
         | 
| 11 | 
            +
                  'start_date'=> '20120202',
         | 
| 12 | 
            +
                  'end_date'=> '20120205'
         | 
| 13 | 
            +
                }
         | 
| 14 | 
            +
              end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
              describe "#build_request" do
         | 
| 17 | 
            +
                it "should get params correctly" do
         | 
| 18 | 
            +
                  assert_equal "https://mapi.alipay.net/gateway.do?service=forex_liquidation_file&partner=2088101122136241&start_date=20120202&end_date=20120205&sign_type=MD5&sign=68c26fcba73dc3134bc88bb04a8be865", @alipay::Service::Settlement.build_request(@params)
         | 
| 19 | 
            +
                end
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
              describe "#request" do
         | 
| 23 | 
            +
                describe "Error scenarios" do
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                  it "return false for no records in period" do
         | 
| 26 | 
            +
                    assert_equal false, @alipay::Service::Settlement.request(@params)
         | 
| 27 | 
            +
                  end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                  it "should throw an AlipayGlobal::Service::Settlement::RequestError for date range > 10 days" do
         | 
| 30 | 
            +
                    proc{ (@alipay::Service::Settlement.request({
         | 
| 31 | 
            +
                      'start_date'=> '20120202',
         | 
| 32 | 
            +
                      'end_date'=> '20120305'
         | 
| 33 | 
            +
                    })).call }.must_raise(AlipayGlobal::Service::Settlement::RequestError)
         | 
| 34 | 
            +
                  end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                  it "should throw an AlipayGlobal::Service::Settlement::RequestError for an errorneous date range" do
         | 
| 37 | 
            +
                    proc{ (@alipay::Service::Settlement.request({
         | 
| 38 | 
            +
                      'start_date'=> '20130202',
         | 
| 39 | 
            +
                      'end_date'=> '20120305'
         | 
| 40 | 
            +
                    })).call }.must_raise(AlipayGlobal::Service::Settlement::RequestError)
         | 
| 41 | 
            +
                  end
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                  it "should throw an AlipayGlobal::Service::Settlement::RequestError for no dates supplied (or nil)" do
         | 
| 44 | 
            +
                    proc{ (@alipay::Service::Settlement.request({})).call }.must_raise(AlipayGlobal::Service::Settlement::RequestError)
         | 
| 45 | 
            +
                    proc{ (@alipay::Service::Settlement.request(nil)).call }.must_raise(NoMethodError)
         | 
| 46 | 
            +
                  end
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                  it "should throw an AlipayGlobal::Service::Settlement::RequestError for finish date ahead of today" do
         | 
| 49 | 
            +
                    proc{ (@alipay::Service::Settlement.request({
         | 
| 50 | 
            +
                      'start_date'=> '20151300',
         | 
| 51 | 
            +
                      'end_date'=> '20151333'
         | 
| 52 | 
            +
                    })).call }.must_raise(AlipayGlobal::Service::Settlement::RequestError)
         | 
| 53 | 
            +
                  end
         | 
| 54 | 
            +
             | 
| 55 | 
            +
                  describe "Incorrect Merchant" do
         | 
| 56 | 
            +
                    before do
         | 
| 57 | 
            +
                      @alipay.api_partner_id = 'daftpunk'
         | 
| 58 | 
            +
                    end
         | 
| 59 | 
            +
             | 
| 60 | 
            +
                    it "should throw an AlipayGlobal::Service::Settlement::RequestError for Merchant ID incorrect" do
         | 
| 61 | 
            +
                      proc{ (@alipay::Service::Settlement.request(@params)).call }.must_raise(AlipayGlobal::Service::Settlement::RequestError)
         | 
| 62 | 
            +
                    end
         | 
| 63 | 
            +
             | 
| 64 | 
            +
                    after do
         | 
| 65 | 
            +
                      @alipay.api_partner_id = '2088101122136241'
         | 
| 66 | 
            +
                    end
         | 
| 67 | 
            +
                  end
         | 
| 68 | 
            +
             | 
| 69 | 
            +
                end
         | 
| 70 | 
            +
              end
         | 
| 71 | 
            +
             | 
| 72 | 
            +
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: alipay_global
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.0. | 
| 4 | 
            +
              version: 0.0.5
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Melvrick Goh, Ng Junyang, Grzegorz Witek
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 11 | 
            +
            date: 2016-03-09 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: bundler
         | 
| @@ -114,6 +114,7 @@ files: | |
| 114 114 | 
             
            - lib/alipay_global/service/exchange.rb
         | 
| 115 115 | 
             
            - lib/alipay_global/service/notification.rb
         | 
| 116 116 | 
             
            - lib/alipay_global/service/reconciliation.rb
         | 
| 117 | 
            +
            - lib/alipay_global/service/settlement.rb
         | 
| 117 118 | 
             
            - lib/alipay_global/service/trade.rb
         | 
| 118 119 | 
             
            - lib/alipay_global/sign.rb
         | 
| 119 120 | 
             
            - lib/alipay_global/sign/dsa.rb
         | 
| @@ -125,6 +126,7 @@ files: | |
| 125 126 | 
             
            - test/service/exchange_test.rb
         | 
| 126 127 | 
             
            - test/service/notification_test.rb
         | 
| 127 128 | 
             
            - test/service/reconciliation_test.rb
         | 
| 129 | 
            +
            - test/service/settlement_test.rb
         | 
| 128 130 | 
             
            - test/service/trade_test.rb
         | 
| 129 131 | 
             
            - test/service_test.rb
         | 
| 130 132 | 
             
            - test/sign/dsa_test.rb
         | 
| @@ -153,7 +155,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 153 155 | 
             
                  version: '0'
         | 
| 154 156 | 
             
            requirements: []
         | 
| 155 157 | 
             
            rubyforge_project: 
         | 
| 156 | 
            -
            rubygems_version: 2. | 
| 158 | 
            +
            rubygems_version: 2.2.2
         | 
| 157 159 | 
             
            signing_key: 
         | 
| 158 160 | 
             
            specification_version: 4
         | 
| 159 161 | 
             
            summary: An unofficial simple global.alipay gem
         | 
| @@ -162,6 +164,7 @@ test_files: | |
| 162 164 | 
             
            - test/service/exchange_test.rb
         | 
| 163 165 | 
             
            - test/service/notification_test.rb
         | 
| 164 166 | 
             
            - test/service/reconciliation_test.rb
         | 
| 167 | 
            +
            - test/service/settlement_test.rb
         | 
| 165 168 | 
             
            - test/service/trade_test.rb
         | 
| 166 169 | 
             
            - test/service_test.rb
         | 
| 167 170 | 
             
            - test/sign/dsa_test.rb
         |