Android下集成Paypal支付
近期项目需要研究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支付的更多相关文章
- 网页集成paypal支付
在网站中集成paypal支付有两种方式: 1.通过paypal账户的按钮创建工具 进入paypal 商户账号,选择创建按钮工具,有包括添加到购物车.购买.租用三类按钮. 之后会生成一段代码,直接将代码 ...
- android app 集成 支付宝支付 微信支付
项目中部分功能点需要用到支付功能,移动端主要集成支付宝支付和微信支付 支付宝sdk以及demo下载地址:https://doc.open.alipay.com/doc2/detail.htm?spm= ...
- Android中集成第三方支付
常见的第三方支付解决方案 支付宝支付 微信支付 银联支付 Ping++统一支付平台(需要继承服务器端和客户端) 短信支付 支付宝的集成流程 相关资料链接: 支付宝支付指引流程:支付指引流程 支付宝An ...
- 集成paypal支付
https://developer.paypal.com cocoapods 管理 引入 pod 'PayPal-iOS-SDK' 1.在appdelegate #import <PayPalM ...
- android 项目集成 微信支付
0.环境 下载 libammsdk.jar 1.需要的常量值 public class Constant { /** 微信中用到的常量值 */ public static final class WX ...
- 最详细的 paypal 支付接口开发--Java版
做全球性的支付,选用paypal!为什么选择paypal? 因为paypal是目前全球最大的在线支付工具,就像国内的支付宝一样,是一个基于买卖双方的第三方平台.买家只需知道你的paypal账号,即可在 ...
- Android 集成支付宝支付详解
一说到支付宝,相信没有人不知道,生活中付款,转账都会用到. 今天来详细介绍下在Android中如何集成支付宝支付到自己的APP中去.让APP能够拥有方便,快捷的支付功能. 准备工作: 商户在b.ali ...
- Python3+Django2集成PayPal(贝宝)跨境支付三方接口以及订单查询和退款业务
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_157 如果您所在的公司涉及外贸或者跨境支付业务,那一定听说过大名鼎鼎的PayPal,总的来说,PayPal在跨国贸易里的优势还是比 ...
- 【网站国际化必备】Asp.Net MVC 集成Paypal(贝宝)快速结账 支付接口 ,附源码demo
开篇先给大家讲段历史故事,博主是湖北襄阳人.襄阳物华天宝,人杰地灵,曾用名襄樊.在2800多年的历史文化中出现了一代名相诸葛亮(卧龙),三国名士庞统(凤雏),魏晋隐士司马徽(水镜先生),唐代大诗人孟浩 ...
随机推荐
- shell 环境初始化顺序
登陆shell 的执行顺序 /etc/profile /etc/profile.d/file /etc/bashrc .bashrc .bash_profile 非登录shell 的执行顺序, 例如: ...
- 中国能用的NTP服务器地址
133.100.11.8 prefer210.72.145.44203.117.180.36131.107.1.10time.asia.apple.com64.236.96.53130.149.17. ...
- PMI列子1
遍历得到PMI中,是注释类型的,你可以参考一下.int num_text, thetype, thesubtype;tag_t draft_aid_tag = NULL_TAG;UF_UI_open ...
- 如果因特网中的所有链路都提供可靠的交付服务,TCP可靠传输服务是多余的吗?
IP协议因为是无连接的, 所以其传输是不可靠的.虽然链路保证了数据包在端到端的传输中不发生差错,但是它不能保证IP数据包是按照正确的书需到达最终的目的地.IP数据包可以使用不同的路由通过网络,到达接收 ...
- K/3 Cloud开发之旅 -- 主页自定义篇(一)
如果说我们要进行主页自定义篇,首先涉及到的就是登陆的自定义,那么如何进行登录界面的自定义呢 其实登陆界面自定义主要就是图片的替换 ,那么我们就看下登陆界面的图片的组成 登录页面底图有两部分组成,一个是 ...
- 如何使用jcraft 模拟SFTP登陆
大家如果熟悉Linux系统话,对ssh,sftp,scp等命令非常熟悉.ssh是一个安全协议,用来在不同系统或者服务器之间进行安全连接.ssh 在连接和传送的过程中会加密所有的数据. 而今天我要介绍的 ...
- yii使用createCommand()增删改查
查询单条数据$sql = "SELECT `name` FROM `table` WHERE id='7'";$users=Yii::$app->db->createC ...
- Android Sqlite数据库相关——实现将 Sqlite 数据库复制到SD 卡
确定 sqlite 数据库所在位置(一般在data/data/com.pagename/databases/ 下,其中 com.pagename为当前项目包名) 确定 sqlite 数据库名称,拼接到 ...
- InnoDB配置文件复习
1.文件分类 1.参数文件 2.日志文件 3.socket文件 4.pid文件 5.MySQL表文件 6.存储引擎文件 1.参数文件 1.参数内容写在my.cnf中,每次MySQL实例启动时,载入my ...
- bower
1. bower介绍 Bower 是 twitter 推出的一款包管理工具,基于nodejs的模块化思想,把功能分散到各个模块中,让模块和模块之间存在联系,通过 Bower 来管理模块间的这种联系. ...