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

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

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

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

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

这里服务端通过Android端传回的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<PayPalItem> productsInCart = new ArrayList<PayPalItem>(); @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的包不支持,在Linux下没问题。

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

Android下集成Paypal支付的更多相关文章

  1. 网页集成paypal支付

    在网站中集成paypal支付有两种方式: 1.通过paypal账户的按钮创建工具 进入paypal 商户账号,选择创建按钮工具,有包括添加到购物车.购买.租用三类按钮. 之后会生成一段代码,直接将代码 ...

  2. android app 集成 支付宝支付 微信支付

    项目中部分功能点需要用到支付功能,移动端主要集成支付宝支付和微信支付 支付宝sdk以及demo下载地址:https://doc.open.alipay.com/doc2/detail.htm?spm= ...

  3. Android中集成第三方支付

    常见的第三方支付解决方案 支付宝支付 微信支付 银联支付 Ping++统一支付平台(需要继承服务器端和客户端) 短信支付 支付宝的集成流程 相关资料链接: 支付宝支付指引流程:支付指引流程 支付宝An ...

  4. 集成paypal支付

    https://developer.paypal.com cocoapods 管理 引入 pod 'PayPal-iOS-SDK' 1.在appdelegate #import <PayPalM ...

  5. android 项目集成 微信支付

    0.环境 下载 libammsdk.jar 1.需要的常量值 public class Constant { /** 微信中用到的常量值 */ public static final class WX ...

  6. 最详细的 paypal 支付接口开发--Java版

    做全球性的支付,选用paypal!为什么选择paypal? 因为paypal是目前全球最大的在线支付工具,就像国内的支付宝一样,是一个基于买卖双方的第三方平台.买家只需知道你的paypal账号,即可在 ...

  7. Android 集成支付宝支付详解

    一说到支付宝,相信没有人不知道,生活中付款,转账都会用到. 今天来详细介绍下在Android中如何集成支付宝支付到自己的APP中去.让APP能够拥有方便,快捷的支付功能. 准备工作: 商户在b.ali ...

  8. Python3+Django2集成PayPal(贝宝)跨境支付三方接口以及订单查询和退款业务

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_157 如果您所在的公司涉及外贸或者跨境支付业务,那一定听说过大名鼎鼎的PayPal,总的来说,PayPal在跨国贸易里的优势还是比 ...

  9. 【网站国际化必备】Asp.Net MVC 集成Paypal(贝宝)快速结账 支付接口 ,附源码demo

    开篇先给大家讲段历史故事,博主是湖北襄阳人.襄阳物华天宝,人杰地灵,曾用名襄樊.在2800多年的历史文化中出现了一代名相诸葛亮(卧龙),三国名士庞统(凤雏),魏晋隐士司马徽(水镜先生),唐代大诗人孟浩 ...

随机推荐

  1. Asp.Net MVC4入门指南(10):第三方控件Studio for ASP.NET Wijmo MVC4 工具应用

    ComponentOne Studio for ASP.NET Wijmo最新版本2013V1支持MVC4,其中包括: 新增 MVC 4 工程模板 (C# & VB) 开箱即用的MVC 4 工 ...

  2. BPTT算法推导

    随时间反向传播 (BackPropagation Through Time,BPTT) 符号注解: \(K\):词汇表的大小 \(T\):句子的长度 \(H\):隐藏层单元数 \(E_t\):第t个时 ...

  3. 2-6 Working with Lambdas

    在C++中使用匿名函数,格式如下:[] () {}; Using a Lambda to Print array Values #include <algorithm> #include ...

  4. Android之ImageSwitcher

    要点: (查看Api总结) 1:ImageSwitcher 继承 ViewSwitcher, (ViewSwitcher 有继承FrameLayout ) 2: 要实现切图必须实现 ViewSwitc ...

  5. HBase安装及简单使用

    通过之前的hadoop0.20.2的安装并调试成功,接下来我们继续安装hbase0.90.5.在安装hbase0.90.5之前,因为hbase0.90.5只支持jdk1.6,所以,我把之前的jdk1. ...

  6. Ajax Step By Step4

    第四,[$.ajax()] $.ajax()是所有 ajax 方法中最底层的方法,所有其他方法都是基于$.ajax()方法的封装.这个方法只有一个参数,传递一个各个功能键值对的对象. $.ajax() ...

  7. STL库的内存配置器(allocator)

    正在学习中,如果有错,还请多多指教,根据不断的理解,会进行更改,更改之前的样子都会保留下来,记录错误是最大的进步,嗯嗯! 具有次配置力的SGI空间配置器(SGI是STL的一种版本,也有其他的版本) 这 ...

  8. jQuery基础_3

    DOM:文档处理内部插入:父子级关系$("a").append($("b"))把b插入到a中[a里面的后面]$("b").appendTo( ...

  9. Java程序员从笨鸟到菜鸟之(一百零一)sql注入攻击详解(二)sql注入过程详解

    在上篇博客中我们分析了sql注入的原理,今天我们就来看一下sql注入的整体过程,也就是说如何进行sql注入,由于本人数据库和网络方面知识有限,此文章是对网上大量同类文章的分析与总结,其中有不少直接引用 ...

  10. Android广播大全

    1.String ADD_SHORTCUT_ACTION 动作:在系统中添加一个快捷方式. 2.String ALL_APPS_ACTION 动作:列举所有可用的应用.输入:无. 3.String A ...