最近项目接入了微信支付和支付宝支付,目前国内普遍也就这两种了。现在两个的接入已经很简单了,几年前的支付还需要自己写参数,现在参数都在后台了,尤其是支付宝,只需要一个订单信息就行了。
总体来说,接入的步骤也就是三四步:
1接入sdk,2获取订单信息,3调起支付,4接受支付回调信息,5处理回调结果
好了,下面说说具体步骤:
先说支付宝:
第一步:接入sdk
dependencies {
api 'com.alipay.sdk:alipaysdk-android:+@aar'
}
第二步,获取到订单信息,这个需要你自己调用自己的后台
String aliPayOrderStr="......"
第三步:调起支付宝支付
final Runnable payRunnable = () -> {
PayTask alipay = new PayTask(mActivity);
Map<String, String> result = alipay.payV2(aliPayOrderStr, true);
Log.i("result==", result.toString());
Message msg = new Message();
msg.what = PayCodes.SDK_PAY_FLAG_ZHIFUBAO;
msg.obj = result;
mHandler.sendMessage(msg);
};// 必须异步调用
Thread payThread = new Thread(payRunnable);
payThread.start();
第四步:这一步跟第三步写在同一个文件就行
@SuppressLint("HandlerLeak")
private Handler mHandler = new Handler() {
@SuppressWarnings("unused")
public void handleMessage(Message msg) {
switch (msg.what) {
case PayCodes.SDK_PAY_FLAG_ZHIFUBAO: {
//这里接收支付宝的回调信息。强烈建议 支付结果一定要调用自己的服务端来确定,不能通过支付宝的回调结果来判断
LogUtils.getInstance().e("");
break;
}
default:
break;
}
}
};
第五步:根据自己的业务需求处理结果。
微信支付过程:
第一步:集成sdk
dependencies {
//微信
api 'com.tencent.mm.opensdk:wechat-sdk-android:+'
}
第二步:获取订单信息,同样需要你后台处理,后台给的数据格式是这样的
public class WxOrderBean {
/**
* package : Sign=WXPay
* appid :appidstr
* sign : signstr
* partnerid : partnerid
* prepayid : prepayid
* noncestr : noncestr
* timestamp : 1695351878
*/
@SerializedName("package")
private String packageX;
private String appid;
private String sign;
private String partnerid;
private String prepayid;
private String noncestr;
private String timestamp;
public String getPackageX() {
return packageX;
}
public void setPackageX(String packageX) {
this.packageX = packageX;
}
public String getAppid() {
return appid;
}
public void setAppid(String appid) {
this.appid = appid;
}
public String getSign() {
return sign;
}
public void setSign(String sign) {
this.sign = sign;
}
public String getPartnerid() {
return partnerid;
}
public void setPartnerid(String partnerid) {
this.partnerid = partnerid;
}
public String getPrepayid() {
return prepayid;
}
public void setPrepayid(String prepayid) {
this.prepayid = prepayid;
}
public String getNoncestr() {
return noncestr;
}
public void setNoncestr(String noncestr) {
this.noncestr = noncestr;
}
public String getTimestamp() {
return timestamp;
}
public void setTimestamp(String timestamp) {
this.timestamp = timestamp;
}
}
第三步,调起微信支付:
//先将你拿到的数据处理成这个WxOrderBean 对象
WxOrderBean datas;
// 需要一个注册微信支付的APPID
IWXAPI api = WXAPIFactory.createWXAPI(mContext,你自己的微信appid);
PayReq req = new PayReq();
req.appId = datas.getAppid();
req.partnerId = datas.getPartnerid();
req.prepayId = datas.getPrepayid();
req.nonceStr = datas.getNoncestr();
req.timeStamp = datas.getTimestamp();
req.packageValue = datas.getPackageX();
req.sign = datas.getSign();
api.sendReq(req); //这里就发起调用微信支付了
第四步:接受微信支付的回调信息。
(1)首先在项目的包路径下面新建一个文件夹wxapi(必须是wxapi这个名字)
(2)然后在wxapi里面新建一个叫WXPayEntryActivity的class文件
(3)在AndroidManifest 文件中注册WXPayEntryActivity,
<activity android:name=".wxapi.WXPayEntryActivity" android:exported="true" android:launchMode="singleTop"/>
特别需要注意的是上面的 exported 属性和 launchMode 属性一定要加上,否则是接收不到回调的
(4)WXPayEntryActivity要实现IWXAPIEventHandler 的接口
public class WXEntryActivity extends AppCompatActivity implements IWXAPIEventHandler {
@Override
public void onResp(BaseResp baseResp) {
//zhifu
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("支付结果");
builder.setMessage(String.valueOf(baseResp.errCode));
builder.show();
}
}
}
第五步:根据自己的业务需求处理结果,注意WXPayEntryActivity一般不要有布局,而且拿到结果之后要finish掉,当然你也可以在这里做一些ui。
好啦,微信和支付宝的支付集成到这里就已经弄好了,希望对大家有所帮助。