Android

时间:2015-07-04 11:04:28

标签: android payment-gateway

在我的应用程序中,我们使用eway支付网关。正如文档中给出的那样,我从沙盒页面获取了立即付款按钮公共API密钥,该页面以epk开头并将其设置为 -

RapidAPI.PublicAPIKey=EWAY_SANDBOX_API
RapidAPI.RapidEndpoint="Sandbox";

接下来,我设置了卡号和cvc -

的值
ArrayList<NVPair> data=new ArrayList<NVPair>();
//              data.add(new NVPair("fname", fname));
//              data.add(new NVPair("lname", lname));
                data.add(new NVPair("card", cardnum));
//              data.add(new NVPair("expmonth", expMonth));
//              data.add(new NVPair("expyear", expYear));
                data.add(new NVPair("cvn", cvc));
                EncryptValuesResponse encryptedResponse = RapidAPI.encryptValues(data);
                ArrayList<NVPair> encryptedValues = encryptedResponse.getValues();

encryptedResponse.getValues()返回null,encryptedResponse包含错误代码S9992,文档声明为&#39;与Rapid API的通信错误&#39;。这让我感到难过,因为我已多次浏览文档,但无法找到错误或遗漏的地方。

任何帮助将不胜感激。提前谢谢。

2 个答案:

答案 0 :(得分:0)

我相信不使用Sandbox作为端点

import urllib2
import urllib
import portalocker
import cookielib
import requests

query = 'http://google.com/search?q=wtf&num=100&tbs=cdr:1,cd_min:2000,cd_max:2015&start=0&filter=0'
headers = {'user-agent': 'Mozilla/5.0 (X11; Linux; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 Midori/0.4'}
response = requests.get(query, proxies={'http': "http://username:password@104.247.XX.XX:80"}, headers=headers, timeout=30, allow_redirects=True)
print response

你应该使用

RapidAPI.RapidEndpoint="Sandbox";

答案 1 :(得分:0)

我问了eWay的支持,他们说API认为手机没有连接到网络。该应用程序正在接收来自其他服务器的响应,因此这显然不是问题所在。我进一步调试了这一点,发现实际错误是 android.os.NetworkOnMainThreadException

我把RapidApi.encryptValues()的电话放在一个单独的线程中,看看它现在有效。

Thread thread = new Thread(new Runnable(){
    @Override
    public void run(){
        EncryptValuesResponse encryptedResponse = RapidAPI.encryptValues(data);
    }
});
thread.start();

API不是异步进行网络调用,而是使用org.apache.http.impl.client.DefaultHttpClient deprecated。我正在考虑重写课程,并自己重新打网络。