require 'test_helper' class JdPay::ServiceTest < Minitest::Test def setup @response_body = <<-EOF V2.0 22294531 000000 成功 N2ZjNmIwMzJiMjA5ZTNhZDhjNjc0YmY1ZWJlY2QyODU0YTc5NmQ3ZWQxMWU1NzE3MWQ0OTUwOGI5NzllYmE4ZjM1YzRiZjlmYWE1M2ZiYjVjYTg5YjA4NTdhMjg3NTBhNzQxM2ZjOWFlN2U3YTNlYzM5ZTI5OTBkZDczNzQ5MjhjM2UxMjhkYWJhMGM0NWY2MWFjYjg2YWFlZDBjOTQ1Y2UyOWNlMDg2MmViOTQ3ZDUyZTczOTMxYjM0NGQwZTNjZGVjZTNkY2EwZmZlYzZlODE1Njc3YWMzODcyNTRhYTcyZDc5MjNhYzc5YWIzZGM0ZGIwYWE4NTc3ZTRhNmE3YmMxMjIwMmEyZmRjMDgxNjhlZjQ5ODVlNGIwNmU2ZTVjZjk3MWRlMmQ5NWYxMmJjNjFiOTY3M2E1ZGY0NWVkNmQ5NzU4OTFmNjFjNTMxMjQ0ZTUyZTdhOWZjNGYwYWRiNTM0ZTQyNGEzMWQyZTYyMWFkMWZkNWY2YTZkZDFmOWNkMTljODg2MzkxNmYwMWViNWMzM2JhNTM5ZWMxYjY1NTA2ZTdmMTYzMjY2YTVjZTk1OTE5M2U0NzNhMGNhMWIwMmVhZjdmYzUyYjc3ZDRiM2Y2NDVlNDFjMDI2YTM0YjU0MGE5MDQzZDEyYmRjNzQzYzM5ODc5NTRhMDcyNGFiOTI4NWQ3MmE0OWUwODNlNGZlNmM3OGMxNGJiNDAzMzI5YTVlMWViNjM2Y2ZkYTg5ZTc1ZDk2ZmJjNTcwMTIyYjU3NWUxZWI2MzZjZmRhODllNzFkYTM0NTE0MDM3YmU5ODQzZTI3Y2Y5OGFjYWM5ZGI3YTg4Yjk5YTQ5NjAxNWYyOWQxZjYwNTJmM2JhOWFlMWI0MzY2Yzc4MmY5YzJlNDY3ODljZjc3ZDMzYjVkN2IyZWRlZjcyOGQ0N2ViZDJkN2Y1YTA5ZTJiYTk5NjUxMGZjNmExMTA3OTFjMjY0NTMyODQ3YjRiYjc3MDlkMmY4YzllY2ZlNzE2MTE1ZjNkMzRlZGRhMmFhOGU4NTA0NThiZTdiOWUzYTM0MDczZTFjNzgxZDFkYzY1ZTRjYzRiYTY3ZGE4NzE4ZjJjNDBmMGU5ZDZlNWU2Y2RiNzAyMzUyNDIyZGVkYmU4NWM4MDdlZTVkNDhkZjg0NGMwNGUwMzA1ZWM5ODJkNmIwMWRmMzg3MjZjZGRkMTVhMWI4YjI1YTdhMWVmNTI2MDUzYmYzYzFlYTBmYmM2MTI3MDMwNTcyNTU1MzQyYjA0ZmZjN2NjOTg4Y2Q2YjQ1M2JhMDQ1NmE3ODUzNDMzMmNmNDFiNWI0M2M5ODhmNmNkMDI2MjFlZDIwYzRhYjliMjU2YmM3ZDU1Yzg2OTBkZWZjNTVhYjA1NzdiYzQxZmY0MzAxNmE3OTRlNWVkMjRjNDc4ZDgzN2JhNDZhMDAwY2ExOGMwMDQ4MWEwMmUyZTcyZjIwYTE0N2MyMTUwMWI3Mjg0NWE0ZDY3YTFiYTEyYzI2MTljYzhkMGM5YzJhOWU1NDljYmY0ZDJlYTM5M2IxYTg5ZWQ4NjMxZWM4NmIwNDI0YzJkYzBjNDU= EOF @result = {"jdpay"=>{"version"=>"V2.0", "merchant"=>"22294531", "result"=>{"code"=>"000000", "desc"=>"成功"}, "orderId"=>"1029148637575787617463", "merchantName"=>"京东支付测试商户号", "amount"=>"1", "expireTime"=>"600", "tradeNum"=>"1486346954111", "qrCode"=>"https://h5pay.jd.com/code?c=616zlks7djfb1z", "sign"=>"C5Mn72q+w1ttkqsUSuhFwJjK8rpikxHkPHaJAXNBVvJGOLMYrSRkHTchACkAISiUzJ60ppWC4DnN6nfnbT5xyrK7kKmHuUivfGRGVnfucvZnV7eDS0Jv+7Np64P/ZyHUkesTDxb0+oDNilTaX82pV5Y2O0qmfs5Ft0LhpJ4Le/w="}} end def test_uniorder stub_request(:post, JdPay::Service::UNIORDER_URL).to_return(body: @response_body) params = { tradeNum: '123456780', tradeName: '测试商品', amount: '1', orderType: '0', notifyUrl: 'http://making.dev/notify' } assert_equal @result, JdPay::Service.uniorder(params) end def test_query stub_request(:post, JdPay::Service::QUERY_URL).to_return(body: @response_body) params = { tradeNum: '12345678', tradeType: '1', oTradeNum: "12345677", } assert_equal @result, JdPay::Service.query(params) end def test_refund stub_request(:post, JdPay::Service::REFUND_URL).to_return(body: @response_body) params = { tradeNum: '12345678', oTradeNum: "12345677", amount: '1', notifyUrl: 'http://making.dev/notify', } assert_equal @result, JdPay::Service.refund(params) end def test_pc_pay html_str = "
" params = { tradeNum: '12345678', tradeName: '测试商品', amount: '1', orderType: '0', notifyUrl: 'http://making.dev/notify', callbackUrl: 'http://frontend.com/return', userId: "0000001", tradeTime: '20170718101010' } assert_equal html_str, JdPay::Service.pc_pay(params) end def test_h5_pay html_str = "
" params = { tradeNum: '12345678', tradeName: '测试商品', amount: '1', orderType: '0', notifyUrl: 'http://making.dev/notify', callbackUrl: 'http://frontend.com/return', userId: "0000001", tradeTime: '20170718101010' } assert_equal html_str, JdPay::Service.h5_pay(params) end def test_revoke stub_request(:post, JdPay::Service::REVOKE_URL).to_return(body: @response_body) params = { tradeNum: '12345678', oTradeNum: "12345677", amount: '1', } assert_equal @result, JdPay::Service.revoke(params) end def test_notify_verify assert_equal @result, JdPay::Service.notify_verify(@response_body) end def test_user_relation xml_str = <<-EOF V2.0 22294531 000000 成功 OWQxYWMyN2I1M2M1NmJhNThjNjc0YmY1ZWJlY2QyODU0YTc5NmQ3ZWQxMWU1NzE3MWQ0OTUwOGI5NzllYmE4ZjM1YzRiZjlmYWE1M2ZiYjVjYTg5YjA4NTdhMjg3NTBhNzQxM2ZjOWFlN2U3YTNlYzM5ZTI5OTBkZDczNzQ5MjhjM2UxMjhkYWJhMGM0NWY2MWFjYjg2YWFlZDBjOTQ1Y2UyOWNlMDg2MmViOTQ3ZDUyZTczOTMxYjM0NGQwZTNjZGVjZTNkY2EwZmZlYzZlODE1Njc3YWMzODcyNTRhYTcyZDc5MjNhYzc5YWIzZGM0ZGIwYWE4NTc3ZTRhNmE3YmMxMjIwMmEyZmRjMDgxNjhlZjQ5ODVlNGIwNmU2ZTVjZjk3MWRlMmQ5NWYxMmJjNmUwZTdkNTJlZjBmNDhlYzIwZDYzY2U1NGY4ZGU2YWIxNDE5OTk0ZjAwZDE0MzdkZmE1NGZjMGRhOTFhZGM1ZDg5MGY3NWU5MmQxMDYyYmZjZDZiNDA4NjhkMjdlYzYwNmEzYTk4YzRhYzQ5ZGM0NjhmN2M0MTYzZTQxMjNiYzhkOWQ1ZjcwOTU4ZDk5NmM1MWEyZDY1MDk4NjJhZmMyZTI0Y2M0YmQxYmRiMTYyOWZlYzY4ZTBkNTk3NjFjMWYxNDJhNTdjMzBiZWM4ZDE1ZGQyNDY3MGFlMGM0YzMzYjllZWMzZDYzY2MxNmZmOGNmNDc4YzYzZjJiZDRjOGY2YzYxZTgzMWVlM2E5YzEyZTM5ZmEwMjM0OTdjZTJjMjNlZWEyOGRkMGE5MGMyMTg5OGY3MTUwN2Q1MDI0OWVhNDE1ZDFkOTllYTI0MWZlNmU1NTQ5ZTg5MzhlYTJhNjVmZDk3ZTE0MDQ5ZmJiNjMzMDMzMDA0YTUwN2ZiMmYyYmFkN2E3OTZjNjZmZDgzMDVlZmQ3MjcwMzg0ZmU2ZTMxM2QyZjgxZjcxYWZlYzZmY2EzYg== EOF stub_request(:post, JdPay::Service::USER_RELATION_URL).to_return(body: xml_str) expect_xml = <<-EOF V2.022294531000000成功trueI1DPdvxF60UYSeTXbv+R3jnjp/Vy21paYo7pxgh6Wb/S1pjf4Cj0gOGYeCfWQullVrpL3UqGD/ZnX7Fz5Y8iuIaCgs0w3xGwe9Ww4MsxKnrzfRQ/sJhfZ9WE/3zJpQfg5yr5bVXrKROoBPjkpbWp78YH0KANZOV2EE0XkivwGJI= EOF assert_equal Hash.from_xml(expect_xml), JdPay::Service.user_relation({userId: "123"}) end def test_cancel_user xml_str = <<-EOF V2.0 22294531 000000 成功 ZmI3YmM5ZTVlODJhYzkyMjhjNjc0YmY1ZWJlY2QyODU0YTc5NmQ3ZWQxMWU1NzE3MWQ0OTUwOGI5NzllYmE4ZjM1YzRiZjlmYWE1M2ZiYjVjYTg5YjA4NTdhMjg3NTBhNzQxM2ZjOWFlN2U3YTNlYzM5ZTI5OTBkZDczNzQ5MjhjM2UxMjhkYWJhMGM0NWY2MWFjYjg2YWFlZDBjOTQ1Y2UyOWNlMDg2MmViOTQ3ZDUyZTczOTMxYjM0NGQwZTNjZGVjZTNkY2EwZmZlYzZlODE1Njc3YWMzODcyNTRhYTcyZDc5MjNhYzc5YWIzZGM0ZGIwYWE4NTc3ZTRhNmE3YmMxMjIwMmEyZmRjMDgxNjhlZjQ5ODVlNGIwNmU2ZTVjZjk3MWRlMmQ5NWYxMmJjNjJlY2EwNGM0ZDFiYzZmYzQ0NDc4N2IwNWEzZjYwZDZjZDUzNDJlYzFiOWY2NGFkOGU5OGQ3ZThkMzE1ZDQzYWQ0YjJlMmE1ZWZkZjEyZWU0ZTBkZmRhMjdmY2VhMzc3N2ZiYzIwZjdjZmFhNWU3NDU5ZmM2MDRjNzQ5MjA2MmNjNjJjYmZiNzJkOWJiZGMyODQzOTE1NzIxNDMwODc0NmZiNWZjYmYxMGU1MTY4MjVlOTU3YWE1Mzg0ZDU0ODJmOTAwYWFlMjA3M2I3NGQxMDRiZDk5YzM0MDViODY5NjBhZjY3NDM2MWNlNzlmMmFmOGVkNDBhZmRiZWMwODkwM2NiOTZlNzcwNzk2OTYwZDNlZDM1ZGEwM2YxZmEwYTQ1Mzc3ZTQzNWNkZmVlNzE4OTYyYjkyOWFiM2ZmYjdlODc3NjI1ZWFiYzU4NTYxNWJjNGY5ODk3MjdkZTViMjUwNDZmYWJlMWZiZWI1MWUxZWNlMzQzYmE3YzkxNTUzMDI4OTBjYzU0YTJiMGM2Yjg1ZTQ= EOF stub_request(:post, JdPay::Service::CANCEL_USER_URL).to_return(body: xml_str) expect_xml = <<-EOF V2.022294531000000成功DUUlg3VLAFgx7vT6nCRBagmyJ8O8xsGC70kb6z9FjSO6vy3Vi7VNJ9rYizT+zP4JXOWxyeOAcgpY4O1I5tT1xrmh0N6k/z8PmRbKYXjUNNY999+teh5Ahwy9aigHw0u1ilWFcKmAMhF1gfyjX66WSKxMQASnDHTCEh8m1VBf76o= EOF assert_equal Hash.from_xml(expect_xml), JdPay::Service.cancel_user({userId: "123"}) end end