博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android下集成Paypal支付
阅读量:6153 次
发布时间:2019-06-21

本文共 4508 字,大约阅读时间需要 15 分钟。

近期项目需要研究paypal支付,官网上的指导写的过于复杂,可能是老外的思维和中国人不一样吧。难得是发现下面这篇文章:

http://www.androidhive.info/2015/02/-integrating-paypal-using---part-1/

在这篇文章的基础上,查看SDK简化了代码,给出下面这个例子,通过。

其实集成paypal还是非常简单的,真正的输入账户、付款都在SDK自带的Activity和service上完成,我们要做的事情,是从自己的Activity跳转过去,跳转的同时带一个Payment参数(即付款明细),Paypal SDK处理完后,会回到你的Activity(此时已经完成支付)。

在上面提到的那篇文章中,流程是这样的:

 

这里服务端通过端传回的paymentID(类似流水号),获取支付明细判断是否为正确单据。但要注意的是此时支付已经完成,在实际应用中(根据官网SDK)的说法,主要是卡流程的下一步,比如物流发货。

 

在编写代码前要准备如下:

1、在https://developer.paypal.com中注册一个开发账号(通常是卖家),这个账号提供一个客户ID和密码,需要写在代码里,买家实际上是支付到客户ID和密码生成的账户;

2、在上面这个页面下,Paypal提供了沙盒功能,通过沙盒你可以虚拟一个买家账号,供测试所用;

3、新建一个Android工程,在里面整合android paypal的SDK;

备注:根据我实际的操作,eclipse没法导入该jar包,会一直提示没有定义的类,可能是因为SDK是由Gradle构建的原因。在stackoverflow上说用android studio不会出现类似问题,我本地是用的IDEA,也一样OK。

 

下面把主要代码附带如下,之前要注意在manifest中增加权限和SDK中涉及的Activity和Service。

public class MyActivity extends Activity {    private static final String TAG = "MainActivity";    private Button button;    private static final int REQUEST_CODE_PAYMENT = 1;    private static PayPalConfiguration paypalConfig = new PayPalConfiguration()            .environment(PayPalConfiguration.ENVIRONMENT_SANDBOX)            .clientId(Config.PAYPAL_CLIENT_ID);    private List
productsInCart = new ArrayList
(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); button = (Button) findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { addToCart(new Product("1", "sinny", "fredric_sinny", null, new BigDecimal(1), "1232131")); PayPalPayment thingsToBuy = prepareFinalCart(); Intent intent = new Intent(MyActivity.this, PaymentActivity.class); intent.putExtra(PayPalService.EXTRA_PAYPAL_CONFIGURATION, paypalConfig); intent.putExtra(PaymentActivity.EXTRA_PAYMENT, thingsToBuy); startActivityForResult(intent, REQUEST_CODE_PAYMENT); } }); } private PayPalPayment prepareFinalCart() { PayPalItem[] items = new PayPalItem[productsInCart.size()]; items = productsInCart.toArray(items); // Total amount BigDecimal subtotal = PayPalItem.getItemTotal(items); // If you have shipping cost, add it here BigDecimal shipping = new BigDecimal("0.0"); // If you have tax, add it here BigDecimal tax = new BigDecimal("0.0"); PayPalPaymentDetails paymentDetails = new PayPalPaymentDetails( shipping, subtotal, tax); BigDecimal amount = subtotal.add(shipping).add(tax); PayPalPayment payment = new PayPalPayment( amount, Config.DEFAULT_CURRENCY, "Description about transaction. This will be displayed to the user.", PayPalPayment.PAYMENT_INTENT_SALE); payment.items(items).paymentDetails(paymentDetails); payment.custom("This is text that will be associated with the payment that the app can use."); return payment; } public void addToCart(Product product) { PayPalItem item = new PayPalItem(product.getName(), 1, product.getPrice(), Config.DEFAULT_CURRENCY, product.getSku()); productsInCart.add(item); Toast.makeText(getApplicationContext(), item.getName() + " added to cart!", Toast.LENGTH_SHORT).show(); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); PaymentConfirmation confirm = data .getParcelableExtra(PaymentActivity.EXTRA_RESULT_CONFIRMATION); String paymentId; try { paymentId = confirm.toJSONObject().getJSONObject("response") .getString("id"); String payment_client = confirm.getPayment().toJSONObject() .toString(); Log.e(TAG, "paymentId: " + paymentId + ", payment_json: " + payment_client); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}

其他:

1、后台的接口都是标准的REST的接口,我例子里没有实现,但要注意的是node的SDK包在windows7下是不可用的,好像是里面一个CRC的包不支持,在下没问题。

2、该程序运行后,会跳转到Paypal界面,你可以用沙盒里注册的虚拟买家账号登陆消费,消费完后在paypal网站上可以查到相应记录:

 

https://developer.paypal.com/

paymentwall.com

原文链接:[http://wely.iteye.com/blog/2382628]

转载地址:http://ptzfa.baihongyu.com/

你可能感兴趣的文章
C++ 迭代器运算
查看>>
【支持iOS11】UITableView左滑删除自定义 - 实现多选项并使用自定义图片
查看>>
JavaWeb学习笔记(十四)--JSP语法
查看>>
【算法笔记】多线程斐波那契数列
查看>>
java8函数式编程实例
查看>>
jqgrid滚动条宽度/列显示不全问题
查看>>
在mac OS10.10下安装 cocoapods遇到的一些问题
查看>>
angularjs表达式中的HTML内容,如何不转义,直接表现为html元素
查看>>
css技巧
查看>>
Tyvj 1728 普通平衡树
查看>>
javascript性能优化
查看>>
多路归并排序之败者树
查看>>
java连接MySql数据库
查看>>
转:Vue keep-alive实践总结
查看>>
深入python的set和dict
查看>>
C++ 11 lambda
查看>>
Android JSON数据解析
查看>>
DEV实现日期时间效果
查看>>
java注解【转】
查看>>
centos 下安装g++
查看>>