Android 支付总结

一、银联支付

首先去银联开放平台下载sdk

到开放平台点击“手机支付控件”, 然后下载sdk,里面资料很详细:

进入“app开发包”目录,里面有个“中国银联手机支付控件介入指南Android.pdf”,里面详细的介绍了集成过程。

集成过程见文档, 这里说一下最基本的用法:

1、首先请求接口从服务端获取tn(交易流水号)

2、调UPPayAssistEx.startPay(activity, null, null, tn, mode);此接口来发起支付,mode:"00"正式环境交易,"01"测试环境交易,不会真实付款

3、获取支付结果:

protected void onActivityResult( int requestCode, int resultCode, Intent data) {
    if( data == null ){
        return;
}
String msg = "";
String str = data.getExtras().getString("pay_result");
if(str.equalsIgnoreCase(R_SUCCESS)) {
    // 如果想对结果数据验签,可使用下面这段代码,
    // 但建议不验签,直接去商户后台查询交易结果
    // result_data结构见c)result_data参数说明
    if(data.hasExtra("result_data")) {
        String sign = data.getExtras().getString("result_data");
        // 此处的verify建议送去商户后台做验签
        // 如要放在手机端验,则代码必须支持更新证书
        if(verify(sign)) {
            //验签成功,显示支付结果
            showResultDialog(" 支付成功! ");
        } else {
            // 验签失败
        }
    }
    // 结果result_data为成功时,去商户后台查询一下再展示成功
    } else if( str.equalsIgnoreCase(R_FAIL) ){
        showResultDialog(" 支付失败! ");
    }else if( str.equalsIgnoreCase(R_CANCEL) ){
        showResultDialog(" 你已取消了本次订单的支付! ");
    } 
}

二、支付宝支付

支付宝支付很简单, 首先去蚂蚁金服官网下载sdk:https://docs.open.alipay.com/54/104509

sdk下载好以后运行, 会发现有3个demo:“支付宝支付demo”,“支付宝授权demo”,“网页支付转native支付”,

“支付宝支付demo”,“支付宝授权demo”两个demo中,orderInfo和authInfo从服务端获取,客户端不要接触账号之类的东西,只需要起线程调用一句支付或者授权代码就可以了,然后去主线程中获取支付或者授权结果就可以了,“网页支付转native支付”直接抄demo的代码就可以了,很easy。

三、微信支付

首先去微信开放平台下载微信支付sdk:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=11_1

点击“Android头文件和库下载”,微信已经把库上传到了jcenter上,里面有android studio下的引用方式。

进入到下载下来的sdk后,找到一个PayActivity.java文件, 里面是请求的实例:

package net.sourceforge.simcpux;


import org.json.JSONObject;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import com.tencent.mm.opensdk.constants.Build;
import com.tencent.mm.opensdk.modelpay.PayReq;
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.WXAPIFactory;

public class PayActivity extends Activity {
	
	private IWXAPI api;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.pay);
		
		api = WXAPIFactory.createWXAPI(this, "wxb4ba3c02aa476ea1");

		Button appayBtn = (Button) findViewById(R.id.appay_btn);
		appayBtn.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				String url = "https://wxpay.wxutil.com/pub_v2/app/app_pay.php";
				Button payBtn = (Button) findViewById(R.id.appay_btn);
				payBtn.setEnabled(false);
				Toast.makeText(PayActivity.this, "获取订单中...", Toast.LENGTH_SHORT).show();
		        try{
					byte[] buf = Util.httpGet(url);
					if (buf != null && buf.length > 0) {
						String content = new String(buf);
						Log.e("get server pay params:",content);
			        	JSONObject json = new JSONObject(content); 
						if(null != json && !json.has("retcode") ){
							PayReq req = new PayReq();
							//req.appId = "wxf8b4f85f3a794e77";  // 测试用appId
							req.appId			= json.getString("appid");
							req.partnerId		= json.getString("partnerid");
							req.prepayId		= json.getString("prepayid");
							req.nonceStr		= json.getString("noncestr");
							req.timeStamp		= json.getString("timestamp");
							req.packageValue	= json.getString("package");
							req.sign			= json.getString("sign");
							req.extData			= "app data"; // optional
							Toast.makeText(PayActivity.this, "正常调起支付", Toast.LENGTH_SHORT).show();
							// 在支付之前,如果应用没有注册到微信,应该先调用IWXMsg.registerApp将应用注册到微信
							api.sendReq(req);
						}else{
				        	Log.d("PAY_GET", "返回错误"+json.getString("retmsg"));
				        	Toast.makeText(PayActivity.this, "返回错误"+json.getString("retmsg"), Toast.LENGTH_SHORT).show();
						}
					}else{
			        	Log.d("PAY_GET", "服务器请求错误");
			        	Toast.makeText(PayActivity.this, "服务器请求错误", Toast.LENGTH_SHORT).show();
			        }
		        }catch(Exception e){
		        	Log.e("PAY_GET", "异常:"+e.getMessage());
		        	Toast.makeText(PayActivity.this, "异常:"+e.getMessage(), Toast.LENGTH_SHORT).show();
		        }
		        payBtn.setEnabled(true);
			}
		});		
		Button checkPayBtn = (Button) findViewById(R.id.check_pay_btn);
		checkPayBtn.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				boolean isPaySupported = api.getWXAppSupportAPI() >= Build.PAY_SUPPORTED_SDK_INT;
				Toast.makeText(PayActivity.this, String.valueOf(isPaySupported), Toast.LENGTH_SHORT).show();
			}
		});
	}
	
}

 这是发起支付的界面,支付结果在WXPayEntryActivity.java界面来监听

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值