4.22
安卓应用的支付功能集成
以下是集成支付宝和微信支付的 Java 实现:
-
支付宝支付集成
// 支付请求
private void payV2() {
Runnable payRunnable = new Runnable() {
@Override
public void run() {
PayTask alipay = new PayTask(MainActivity.this);
Map<String, String> result = alipay.payV2(orderInfo, true);Message msg = new Message(); msg.what = SDK_PAY_FLAG; msg.obj = result; mHandler.sendMessage(msg); }};
// 必须异步调用
Thread payThread = new Thread(payRunnable);
payThread.start();
}
// 支付结果处理
private Handler mHandler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
switch (msg.what) {
case SDK_PAY_FLAG:
@SuppressWarnings("unchecked")
PayResult payResult = new PayResult((Map<String, String>) msg.obj);
String resultInfo = payResult.getResult();// 同步返回需要验证的信息
String resultStatus = payResult.getResultStatus();
// 判断resultStatus 为9000则代表支付成功
if (TextUtils.equals(resultStatus, "9000")) {
Toast.makeText(MainActivity.this, "支付成功", Toast.LENGTH_SHORT).show();
} else {
// 判断resultStatus 为非"9000"则代表可能支付失败
// "8000"代表支付结果因为支付渠道原因或者系统原因还在等待支付结果确认,最终交易是否成功以服务端异步通知为准(小概率状态)
if (TextUtils.equals(resultStatus, "8000")) {
Toast.makeText(MainActivity.this, "支付结果确认中", Toast.LENGTH_SHORT).show();
} else {
// 其他值就可以判断为支付失败,包括用户主动取消支付,或者系统返回的错误
Toast.makeText(MainActivity.this, "支付失败", Toast.LENGTH_SHORT).show();
}
}
break;
default:
break;
}
return false;
}
});
2. 微信支付集成
// 注册APPID
private IWXAPI api;
api = WXAPIFactory.createWXAPI(this, "你的APPID", true);
api.registerApp("你的APPID");
// 发起支付
PayReq req = new PayReq();
req.appId = "你的APPID";
req.partnerId = "商户号";
req.prepayId = "预支付交易会话ID";
req.nonceStr = "随机字符串";
req.timeStamp = "时间戳";
req.packageValue = "Sign=WXPay";
req.sign = "签名";
api.sendReq(req);
// 处理支付结果(需在WXPayEntryActivity中实现)
public class WXPayEntryActivity extends AppCompatActivity implements IWXAPIEventHandler {
private IWXAPI api;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_wxpay_entry);
api = WXAPIFactory.createWXAPI(this, "你的APPID");
api.handleIntent(getIntent(), this);
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
api.handleIntent(intent, this);
}
@Override
public void onReq(BaseReq req) {
}
@Override
public void onResp(BaseResp resp) {
if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
if (resp.errCode == 0) {
Toast.makeText(this, "支付成功", Toast.LENGTH_SHORT).show();
} else if (resp.errCode == -1) {
Toast.makeText(this, "支付失败", Toast.LENGTH_SHORT).show();
} else if (resp.errCode == -2) {
Toast.makeText(this, "用户取消", Toast.LENGTH_SHORT).show();
}
finish();
}
}
}
浙公网安备 33010602011771号