我已经下载了适用于Android的Paypal SDK并将我的代码与示例项目进行了比较,除了我在paypal之后发送给Activity的添加意图外,它们是相同的。问题是我遇到了一个奇怪的错误。一旦我点击按钮,并添加cc详细信息并按下费用... paypal说我输入的信用卡无效。这只发生在我尝试发送自己的额外内容时。当我删除我的额外意图突然相同的沙盒信用卡通过就好了。这是因为paypal只接受某些变量,也许Floats并不喜欢字符串?或者,我的代码中可能存在一个简单的缺陷?
public void onBuyPressed(View pressed) {
TextView inputx =(TextView)findViewById(R.id.super);
String ix =inputx.getText().toString();
TextView inputP =(TextView)findViewById(R.id.input);
String ip =inputP.getText().toString();
try{
double valuey =Double.parseDouble(ip);
if(valuey>0)
{
PayPalPayment payment = new PayPalPayment(new BigDecimal(valuey), "USD", ix );
Intent intent = new Intent(this, PaymentActivity.class);
intent.putExtra(PaymentActivity.EXTRA_PAYPAL_ENVIRONMENT, PaymentActivity.ENVIRONMENT_SANDBOX);
// it's important to repeat the clientId here so that the SDK has it if Android restarts your
// app midway through the payment UI flow.
intent.putExtra(PaymentActivity.EXTRA_CLIENT_ID, "AZetc,etc,etc..the Id is NOT the issue");
// Provide a payerId that uniquely identifies a user within the scope of your system,
// such as an email address or user ID.
intent.putExtra(PaymentActivity.EXTRA_PAYER_ID, "");
intent.putExtra(PaymentActivity.EXTRA_RECEIVER_EMAIL,"myprivateemail@yahoo.com");
intent.putExtra(PaymentActivity.EXTRA_PAYMENT, payment);
startActivityForResult(intent, 0);
}
else{
Toast.makeText(getApplicationContext(), "You haven't entered anything.",
Toast.LENGTH_LONG).show();
}} catch (NumberFormatException e) {
}}
@Override
protected void onActivityResult (int requestCode, int resultCode, Intent data) {
if (resultCode == Activity.RESULT_OK) {
PaymentConfirmation confirm = data.getParcelableExtra(PaymentActivity.EXTRA_RESULT_CONFIRMATION);
if (confirm != null) {
final TextView x =(TextView)findViewById(R.id.custname);
String onex = x.getText().toString();
final TextView nov =(TextView)findViewById(R.id.secret);
String dec = nov.getText().toString();
final TextView feb =(TextView)findViewById(R.id.secretname);
String jan = feb.getText().toString();
final TextView xx =(TextView)findViewById(R.id.inputPrice);
String twox = xx.getText().toString();
final TextView xxx =(TextView)findViewById(R.id.help);
String threex = xxx.getText().toString();
Intent intent= new Intent(SuperActivity2.this,SuperCheckActivity.class)
.putExtra("secret",dec)
.putExtra("secretname",jan)
.putExtra("date",threex)
.putExtra("inputPrice",twox)
.putExtra("customername",onex)
.putStringArrayListExtra("list", listItems);
startActivity(intent);
try {
Log.i("paymentExample", confirm.toJSONObject().toString(4));
// TODO: send 'confirm' to your server for verification.
// see https://developer.paypal.com/webapps/developer/docs/integration/mobile/verify-mobile-payment/
// for more details.
} catch (JSONException e) {
Log.e("paymentExample", "an extremely unlikely failure occurred: ", e);
}
}
}
else if (resultCode == Activity.RESULT_CANCELED) {
Log.i("paymentExample", "The user canceled.");
}
else if (resultCode == PaymentActivity.RESULT_PAYMENT_INVALID) {
Log.i("paymentExample", "An invalid payment was submitted. Please see the docs.");
}
答案 0 :(得分:0)
我有同样的问题。当我尝试使用PayPal付款时没问题,但是当我尝试使用信用卡付款时,我收到错误,信用卡的数据不正确。 然后我调试我的应用程序,看看,我设置为PayPalPayment的金额有大的percision。所以我将我的percision设置为2位小数,并用信用卡支付工作正常。
这是一个例子,我如何设定金额:
ttlPrice = new BigDecimal(totalPrice, MathContext.DECIMAL32).setScale(2);
payment = new PayPalPayment(ttlPrice, "EUR", "description");
答案 1 :(得分:0)
ttlPrice = new BigDecimal(totalPrice,MathContext.DECIMAL32).setScale(2); payment = new PayPalPayment(ttlPrice," EUR"," description");