一、银联支付
首先去银联开放平台下载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界面来监听