Paypal支付(一)MPL真正的快捷支付

一、前导

前面讲到了MEC支付,是在Web端集成好的,在手机端仅仅需通过WebView进行载入就可以,不须要不论什么Paypal第三方架包。以下将的是MPL支付。须要架包。

这样的支付的形式能够參考以下的演示:

https://www.paypal-biz.com/product/demo/product/mobile-payment/index.html

二、MPL支付案例

PaymentBean

package com.example.paypaldemo;

public class PaymentBean {
	private float unitPrice;
	private int quantity;
	private float discount;
	public float getUnitPrice() {
		return unitPrice;
	}
	public void setUnitPrice(float unitPrice) {
		this.unitPrice = unitPrice;
	}
	public int getQuantity() {
		return quantity;
	}
	public void setQuantity(int quantity) {
		this.quantity = quantity;
	}
	public float getDiscount() {
		return discount;
	}
	public void setDiscount(float discount) {
		this.discount = discount;
	}
	public PaymentBean(float unitPrice, int quantity, float discount) {
		super();
		this.unitPrice = unitPrice;
		this.quantity = quantity;
		this.discount = discount;
	}

}

PizzaMain

package com.example.paypaldemo;
/**
 * https://www.paypal-biz.com/product/demo/product/mobile-payment/index.html
 */
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.RelativeLayout;
import android.widget.RelativeLayout.LayoutParams;
import android.widget.Toast;

import com.paypal.android.MEP.CheckoutButton;
import com.paypal.android.MEP.PayPal;
import com.paypal.android.MEP.PayPalActivity;
import com.paypal.android.MEP.PayPalInvoiceData;
import com.paypal.android.MEP.PayPalInvoiceItem;
import com.paypal.android.MEP.PayPalPayment;

public class PizzaMain extends Activity implements OnClickListener {
	private boolean _paypalLibraryInit;
	private static final String TAG = "PizzaMain";
	// APP-80W284485P519543T
	private CheckoutButton launchPayPalButton;
	private int PAYPAL_BUTTON_ID = 1341515;
	private List<PaymentBean> list = new ArrayList<PaymentBean>();;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		initLibrary();
		showPayPalButton();
	}

	public void initLibrary() {
		PayPal pp = PayPal.getInstance();
		if (pp == null) { // Test to see if the library is already initialized

			// This main initialization call takes your Context, AppID, and
			// target server
			pp = PayPal.initWithAppID(this, "APP-80W284485P519543T", PayPal.ENV_NONE);
			// Required settings:

			// Set the language for the library
			pp.setLanguage("en_US");

			// Some Optional settings:

			// Sets who pays any transaction fees. Possible values are:
			// FEEPAYER_SENDER, FEEPAYER_PRIMARYRECEIVER, FEEPAYER_EACHRECEIVER,
			// and FEEPAYER_SECONDARYONLY
			pp.setFeesPayer(PayPal.FEEPAYER_EACHRECEIVER);

			// true = transaction requires shipping
			pp.setShippingEnabled(true);

			_paypalLibraryInit = true;
		}
	}

	@Override
	protected void onResume() {
		super.onResume();
		showPayPalButton();
	}

	private void showPayPalButton() {

		// Generate the PayPal checkout button and save it for later use
		PayPal pp = PayPal.getInstance();
		// Paypal按钮类型:CheckoutButton.TEXT_DONATE捐赠,CheckoutButton.TEXT_PAY付款
		launchPayPalButton = pp.getCheckoutButton(this, PayPal.BUTTON_278x43, CheckoutButton.TEXT_PAY);
		// The OnClick listener for the checkout button
		launchPayPalButton.setOnClickListener(this);

		// Add the listener to the layout
		RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
		params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
		params.bottomMargin = 10;
		launchPayPalButton.setLayoutParams(params);
		launchPayPalButton.setId(PAYPAL_BUTTON_ID);
		((RelativeLayout) findViewById(R.id.RelativeLayout01)).addView(launchPayPalButton);
		((RelativeLayout) findViewById(R.id.RelativeLayout01)).setGravity(Gravity.CENTER_HORIZONTAL);

	}

	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		super.onActivityResult(requestCode, resultCode, data);
		switch (resultCode) {
		// The payment succeeded
		case Activity.RESULT_OK:
			Toast.makeText(this, "transact successful,has submit infomation to PayPal", Toast.LENGTH_SHORT).show();
			String payKey = data.getStringExtra(PayPalActivity.EXTRA_PAY_KEY);
			String transactionID = data.getStringExtra(PayPalActivity.EXTRA_CORRELATION_ID);// 交易号
			String paymentInfo = data.getStringExtra(PayPalActivity.EXTRA_PAYMENT_INFO);// 交易信息
			String status = data.getStringExtra(PayPalActivity.EXTRA_PAYMENT_STATUS);// 交易状态
			Log.e(TAG, "payKey:" + payKey + ",transactionID:" + transactionID + ",paymentInfo" + paymentInfo + ",status" + status);
			break;

		// The payment was canceled
		case Activity.RESULT_CANCELED:
			Toast.makeText(this, "cancle", Toast.LENGTH_SHORT).show();
			break;

		// The payment failed, get the error from the EXTRA_ERROR_ID and
		// EXTRA_ERROR_MESSAGE
		case PayPalActivity.RESULT_FAILURE:
			Toast.makeText(this, "error", Toast.LENGTH_SHORT).show();
			String errorID = data.getStringExtra(PayPalActivity.EXTRA_ERROR_ID);
			String errorMessage = data.getStringExtra(PayPalActivity.EXTRA_ERROR_MESSAGE);
		}
	}

	// 点击按钮之后的操作都是在Payment中进行的,也就是在PayActivity中进行的,交易完成后,会返回到当前Activity
	@Override
	public void onClick(View arg0) {
		PayPalPayment payment = new PayPalPayment();
		// 设置货币种类,默认是USD
		payment.setCurrencyType("USD");
		// 收件人信息:email或者phone number
		payment.setRecipient("[email protected]");
		// 设置物品描写叙述。默觉得空
		payment.setDescription("");
		// 显示给买家看的商户名称, 假设没有设置则显示收款方email
		payment.setMerchantName("ChinaBuye");
		// 设置付款类型,捐款、个人、商品
		// PAYMENT_TYPE_SERVICE, PAYMENT_TYPE_PERSONAL, or PAYMENT_TYPE_NONE
		payment.setPaymentType(PayPal.PAYMENT_TYPE_GOODS);
		// 交易结果还会调用web远端的一个地址传递交易数据
		payment.setIpnUrl("http://www...../.../x.php");
		// 设置交易备注信息,千万别写中文。否则怎么错的都不知道
		payment.setMemo("Note: please give me the invoice");
		// PayPalInvoiceData can contain tax and shipping amounts, and an
		// ArrayList of PayPalInvoiceItem that you can fill out.
		// These are not required for any transaction.
		PayPalInvoiceData invoice = new PayPalInvoiceData();
		// 设置税
		invoice.setTax(new BigDecimal(2f));
		list.clear();
		// 向购物车中加入一个产品
		PayPalInvoiceItem item1 = new PayPalInvoiceItem();
		item1.setName("gadget");
		item1.setID("01");
		// 单位价格和数量的问题
		// 这里有个问题。就是价格格式必须xx#.##的形式。否则交易不成功,解决方式參考formatPrice()
		float unitPrice = 12.22f;
		int quantity = 2;
		float discount = 1;
		PaymentBean bean1 = new PaymentBean(unitPrice, quantity, discount);
		list.add(bean1);
		item1.setTotalPrice(formatTotalPrice(unitPrice, quantity, discount));// 单位价格*数量
		item1.setUnitPrice(formatUnitPrice(unitPrice));// 单位价格
		item1.setQuantity(2); // 数量
		invoice.getInvoiceItems().add(item1); // 加入item到购物篮

		// 设置付款金额,不含税和运费
		payment.setSubtotal(formatSubtotal());

		Intent paypalIntent = PayPal.getInstance().checkout(payment, this);
		this.startActivityForResult(paypalIntent, 1);

		// 以下这样的方法报错
		// Intent paypalIntent = new Intent(this, PayPalActivity.class);
		// paypalIntent.putExtra(PayPalActivity.EXTRA_PAYMENT_INFO, payment);
		// this.startActivityForResult(paypalIntent, 1);
	}

	// 格式化付款金额
	private BigDecimal formatSubtotal() {
		float subTotal = 0;
		for (int x = 0; x < list.size(); x++) {
			PaymentBean bean = list.get(x);
			subTotal += bean.getQuantity() * bean.getUnitPrice() * bean.getDiscount();
		}
		return formatUnitPrice(subTotal);
	}

	// 格式化单个商品的总价价格
	private BigDecimal formatTotalPrice(float unitPrice, int quantity, float discount) {
		DecimalFormat dfm = new DecimalFormat("#.##");
		float price = unitPrice * discount;
		BigDecimal big = new BigDecimal(dfm.format(price * quantity));
		return big;
	}

	// 格式化单个商品的单位价格
	private BigDecimal formatUnitPrice(float unitPrice) {
		DecimalFormat dfm = new DecimalFormat("#.##");
		BigDecimal big = new BigDecimal(dfm.format(unitPrice));
		return big;
	}
}

项目结构例如以下:

时间: 2024-10-08 18:40:01

Paypal支付(一)MPL真正的快捷支付的相关文章

B2B商城电子商务平台网上商城系统支付通道申请第三方支付接口对接搭建 支付宝微信扫码网关网银银联快捷支付

需要了解 JR金融项目 区块链,比特币,p2p项目,B2B网关,现货资金盘,期货招商,股票配资,商品交易所 大盘的 金融支付 第三方支付,网关支付,网银支付,银行卡支付,话费卡支付,银联代扣,支付渠道,支付宝支付,微信支付,扫码支付,快捷支付,支付牌照申请,线上支付通道搭建,支付通道申请,支付接口对接,原生支付宝网关支付!独立后台,D0实时结算,API批量代付接口 JR / BC / QP 菠菜奔驰游戏等稳定安全通道!大量三方支付资质出售!请加QQ 2954704394 近年来,第三方支付发展势

【深度解析】第三方支付的分类、接口与支付流程

原标题:[深度解析]第三方支付的分类.接口与支付流程 目录 - - - - - 1. 概述 2. 支付环节 3. 分类 4. 银行接口 如今第三方支付已经发展的非常成熟,但是至今仍未有一个比较权威的定义,下面将根据自己的工作经历说明一下第三方支付,文章有点长. 1 概述 第三方支付是具备一定实力和信誉保障的独立机构,采用与各大银行签约的方式,提供与银行支付结算系统接口的交易支持平台的网络支付方式. 第三方支付平台是指平台提供商通过通信.计算机和信息安全技术,在商家和银行之间建立连接,从而实现消费

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

开篇先给大家讲段历史故事,博主是湖北襄阳人.襄阳物华天宝,人杰地灵,曾用名襄樊.在2800多年的历史文化中出现了一代名相诸葛亮(卧龙),三国名士庞统(凤雏),魏晋隐士司马徽(水镜先生),唐代大诗人孟浩然(孟襄阳),张继.杜审言,文学家皮日休,北宋著名书画家米芾(米襄阳),“允冠百王”的光武帝刘秀,东方圣人释道安等一大批历史文化名人.小说<三国演义>120回故事中有30多回提到襄阳. 相传诸葛亮的老婆黄月英黄头发黑皮肤,但知识广博.诸葛亮发明木牛流马,就是从黄月英的传授的技巧上发展出来.不仅如此

关于集成支付宝快捷支付(无线)的流程

最近在开发Android客户端需要集成支付宝款姐支付(无线),被各种公钥私钥绕的头晕故在这里记录一下,希望对其他人也有所帮助 本文使用的开发语言: 客户端:JAVA 服务端:PHP 1.确保你的支付宝商家帐号已经签约快捷支付(无线) 2.下载快捷支付(无线)SDK,目录结构如下图 注:openssl用来生成商户的公钥和私钥,其余的一目了然 2.1 生成一对公钥和私钥,然后打开公钥(rsa_public_key.pem)去除-----BEGIN PUBLIC KEY----------END PU

银行制定快捷支付限额原因

络特莱--4月29日讯,所谓快捷支付,指的是为了满足消费者在网购上,利用小份金额进行虚拟账户系统快捷支付的方式.快捷支付需要消费者填写姓名.身份证号码.银行卡号.手机进行注册,填写之后去人,系统会自动发送一条验证码到消费者手机中进行验证,通过手动输入验证码,即可银行卡与快捷支付账号绑定.消费者在网上购物时,每次只需要输入系统发送到手机中的验证码,即可完成交易款项的支付.    虽然快捷支付为消费者进行小额资金支付来了了便利,但是同时存在安全隐患.    1.开通快捷支付前,消费者并没有通过任何渠

使用OpenSSL做RSA签名验证 支付宝移动快捷支付 的server异步通知

因为业务须要.我们须要使用支付宝移动快捷支付做收款.支付宝给了我们<移动快捷支付应用集成接入包支付接口>见支付宝包<WS_SECURE_PAY_SDK>. 支付宝给的serverdemo仅仅有Java.C#.PHP三种,而我们server端使用的是C++. 这当中就涉及到接收支付宝的server异步通知.为了确保接收到的server异步通知来至支付宝,我们就必须验证支付宝的签名. 坑爹的是,原来PC端使用MD5做签名,预计支付宝考虑到移动端的风险更高,于是改用RSA做移动快捷支付应

2分钟快速集成支付宝快捷支付

本文介绍了iOS快速集成支付宝支付的方法,本文中介绍的方法是经过一次封装,因此配置完成之后调用仅需一行代码即可支付宝支付,非常的方便,希望大家喜欢. 我只是根据官方的文档,对支付宝的SDK做了进一步封装,其中密钥的生成很简单,需要看官方的文档,官方的文档我在工程附件目录里也有一份,如果需要马上集成,没工夫研究的话,可以大致看一下密钥的生成即可,其他的配置我会在下面进行讨论. 要在iOS应用里集成支付宝支付,需要公司和支付宝签约,然后生成相应的密钥.密钥的生成支付宝的开发文档里已经说的非常清楚了,

网上盗刷事件频发 风险肇始于“快捷支付”?

网上盗刷事件频发 风险肇始于“快捷支付”? http://www.paycircle.cn/news/201604/28/10163.html [PayCircle支付圈核心提示]2016年4月,<非银行支付机构分类评级管理办法>正式出台.结合前面提到的<非银行支付机构网络支付业务管理办法>来看,一些技术能力不足,业务水平有限,风控能力较差的中小型第三方支付公司将逐渐弱化,直至退出舞台:而技术能力较强.业务水平较高.风控能力较强的大型第三方公司将获得优待. 刚过去的一段时间里,银行

乐享快捷支付背后银行业IT架构新思考

随着社会的不断进步和发展,人们的生活水平越来越高,生活节奏也越来越快.在这个着重强调便捷.效率的时代,以往单纯的营业厅办理银行各类业务,已经不能满足人们日益增长的消费.支付需求,于是我们看到银行业向用户提供网上银行支付.手机银行等便捷的支付手段.作为一名普通消费者,在遇到在线支付.紧急情况时,还是很需要一次快捷而高效的金融服务,在互联网和移动互联网端进行一次完整的网上购物,只需输入登录名和密码,就可以快速完成一次简单交易.在线金融银行支付的出现,很好的弥补了线下银行业的繁琐与不方便. 在这一切便