Android 支付宝【支付】

支付宝SDK跟新版本迭代,大家可以选择适合的自己的版本。

个人觉得改版本非常的稳定,页面也是大众APp支付界面。

建议先去申请企业 或者 个人开发者.  http://act.life.alipay.com/shopping/before/help/index.html

先上张图片,压压惊 - ...




支付宝流程图: 





图中外部商务客户端,是我们需要操作的:

1.调用支付接口

2.接收返回结果信息,自己根据逻辑处理



外部服务器,是我们后台需要做的:

1.异步发送支付通知

2.接受响应



支付宝签约成功会有4个重要的Key值:



这些都是签约成功,得到的...

用签约支付宝账号登录 www.alipay.com 后,在商家服务页面中获取.


RSA密钥生成命令

生成RSA私钥

openssl>genrsa -out rsa_private_key.pem 1024

生成RSA公钥

openssl>rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

将RSA私钥转换成PKCS8格式

openssl>pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt

注意:“>”符号后面的才是需要输入的命令。


可以参考:

移动支付接口智能SDK版.pdf & 移动支付接口智能SDK版接入与使用规则.pdf


Dome:

简单 MainActivity:

/**
 * 该本 移动支付接口智能SDK版(20140923)
 * 目前比较稳定
 * @author Neng
 * @version 2014/12/1
 */
public class MainActivity extends Activity {
	
	public static final String TAG = "MainActivity";

	private static final int RQF_PAY = 1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    
    public void onButton (View view){
    	//获取拼接请求URL
    	String orderInfo = getOrderInfo("iphone6 plus", "土豪金", "0.01");
    	//URL 加密-(私钥)
    	String sign = Rsa.sign(orderInfo, Keys.PRIVATE);
    	// 仅需对sign 做URL编码
    	try {
			// 仅需对sign 做URL编码
			sign = URLEncoder.encode(sign, "UTF-8");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
    	//最终URl 
		final String payInfo = orderInfo + "&sign=\"" + sign + "\"&"+ getSignType();
		Log.d("最终URl :", payInfo);
		//开启线程启动支付宝 - -
		new Thread(new Runnable() {
			
			@Override
			public void run() {
				//**------------AliPay 已经启动支付宝,用户操作流程,客户端是不知道
				AliPay alipay = new AliPay(MainActivity.this, mHandler);
				//设置为沙箱模式,不设置默认为线上环境
				//alipay.setSandBox(true);

				//****支付操作完毕,返回result结果
				String result = alipay.pay(payInfo);
				Log.i(TAG, "result = " + result);
				
				Message msg = new Message();
				msg.what = RQF_PAY;
				msg.obj = result;
				mHandler.sendMessage(msg);
				
			}
		}).start();
		
    }
    
    
	Handler mHandler = new Handler() {
		@Override
		public void handleMessage(Message msg) {
			super.handleMessage(msg);
			if(msg.what == RQF_PAY){
				//Result主要对数据处理,字符串解析,这里返回不是json,只能拆字段解析
				Result result = new Result((String) msg.obj,Keys.PUBLIC);
				
				Log.i(TAG, "状态编号 = " + result.getResultStatus());
				//我们需要提示内容不想要支付宝给的内容,这里可以用自定义内容getHashMapV()
				Log.i(TAG, "支付宝字段内容 = " + result.getMemo());
				Log.i(TAG, "用户自定义Hap内容 = " + result.getHashMapV());
				
				//只有成功支付后:支付宝会返回你的公钥,作为判断依据
				Log.i(TAG, "支付一致?=  " + result.getIsSignOk());
				
			}
			
		}
		
	};


	/**
	 * 创建订单信息
	 * @param subject  商品名称
	 * @param body 商品详情
	 * @param price 商品金额
	 * @return
	 */
	public String getOrderInfo(String subject, String body, String price) {
		// 合作者身份ID
		String orderInfo = "partner=" + "\"" + Keys.DEFAULT_PARTNER + "\"";

		// 卖家支付宝账号
		orderInfo += "&seller_id=" + "\"" + Keys.DEFAULT_SELLER + "\"";

		// 商户网站唯一订单号
		orderInfo += "&out_trade_no=" + "\"" + getOutTradeNo() + "\"";

		// 商品名称
		orderInfo += "&subject=" + "\"" + subject + "\"";

		// 商品详情
		orderInfo += "&body=" + "\"" + body + "\"";

		// 商品金额
		orderInfo += "&total_fee=" + "\"" + price + "\"";

		// 服务器异步通知页面路径[服务器后台回调用,可以默认]
		orderInfo += "¬ify_url=" + "\"" + "http://notify.msp.hk/notify.htm"
				+ "\"";

		// 接口名称, 固定值
		orderInfo += "&service=\"mobile.securitypay.pay\"";

		// 支付类型, 固定值
		orderInfo += "&payment_type=\"1\"";

		// 参数编码, 固定值
		orderInfo += "&_input_charset=\"utf-8\"";

		// 设置未付款交易的超时时间
		// 默认30分钟,一旦超时,该笔交易就会自动被关闭。
		// 取值范围:1m~15d。
		// m-分钟,h-小时,d-天,1c-当天(无论交易何时创建,都在0点关闭)。
		// 该参数数值不接受小数点,如1.5h,可转换为90m。
		orderInfo += "&it_b_pay=\"30m\"";

		// 支付宝处理完请求后,当前页面跳转到商户指定页面的路径,可空
		orderInfo += "&return_url=\"m.alipay.com\"";

		// 调用银行卡支付,需配置此参数,参与签名, 固定值
		// orderInfo += "&paymethod=\"expressGateway\"";

		return orderInfo;
	}
    
	
	/**
	 * 商户网站唯一订单号
	 * 自定义,可以服务器生产
	 */
	private String getOutTradeNo() {
		SimpleDateFormat format = new SimpleDateFormat("MMddHHmmss",
				Locale.getDefault());
		Date date = new Date();
		String key = format.format(date);

		Random r = new Random();
		key = key + r.nextInt();
		key = key.substring(0, 15);
		return key;
	}
	
	private String getSignType() {
		return "sign_type=\"RSA\"";
	}
}

记得把 alipay_lib项目 Library -


参考:支付宝Doem


作者简单整理,欢迎转载:http://blog.csdn.net/cs_li1126/article/details/41682597

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值