这里分享下android端集成微信支付的步骤。
一、首先到官网https://open.weixin.qq.com/创建一个应用,审核说是7天内。通过后获取AppID就可以进行愉快的开发了。
二、基本步骤就是移动端拼接好后天需要的购物车信息,后台返回随机验证码以及第三方的商家号,生成订单。然后我们再通过随机验证码以及第三方的商家号,确认支付信息,获取微信支付需要的一些参数,进行支付就可以了。然后会有一个通用的类进行回调(WXPayEntryActivity)
后台会返回的参数
PayReq req = new PayReq();
req.appId = APP_ID;//这个参数就是appid
req.partnerId = "";
req.prepayId = "";
req.packageValue = "";
req.nonceStr = "";
req.timeStamp = "";
req.sign = "";
api.sendReq(req);
三、集成步骤:
1、copy官方文档中的wxapi文件夹进行修改
2、WXPayEntryActivity.java
package com.xxx.xxx.wxapi;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import com.coofond.carservices.common.Constant;
import com.coofond.carservices.utils.ToastUtil;
import com.tencent.mm.opensdk.constants.ConstantsAPI;
import com.tencent.mm.opensdk.modelbase.BaseReq;
import com.tencent.mm.opensdk.modelbase.BaseResp;
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler;
import com.tencent.mm.opensdk.openapi.WXAPIFactory;
/**
* @description: 微信支付结果回调
* 回调中errCode值
* 0 成功 展示成功页面
* -1 错误 可能的原因:签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等。
* -2 用户取消 无需处理。发生场景:用户不支付了,点击取消,返回APP。
* @Author zsj on 2016/12/9 11:15.
*/
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {
private IWXAPI api;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
api = WXAPIFactory.createWXAPI(this, Constant.WXAPP_ID);
api.handleIntent(getIntent(), this);
}
@Override
public void onReq(BaseReq baseReq) {
}
/**
* launchMode为singleTask的时候,通过Intent启到一个Activity,如果系统已经存在一个实例,
* 系统就会将请求发送到这个实例上,但这个时候,系统就不会再调用通常情况下我们处理请求数据的onCreate方法,
* 而是调用onNewIntent方法
* 系统可能会随时杀掉后台运行的Activity,如果这一切发生,那么系统就会调用onCreate方法,而不调用onNewIntent方法,
* 一个好的解决方法就是在onCreate和onNewIntent方法中调用同一个处理数据的方法
*
* @param intent 当前实例
*/
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
api.handleIntent(intent, this);
}
@SuppressLint("StringFormatInvalid")
@Override
public void onResp(BaseResp resp) {
if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
if (resp.errCode == 0) {
ToastUtil.toastCenter2(this, "支付成功");
} else {
ToastUtil.toastCenter2(this, "支付失败,请重试");
}
finish();
}
}
}
3、清单文件mainfest.xml
<!--微信支付-->
<activity android:name=".wxapi.WXPayEntryActivity"
android:exported="true"
android:launchMode="singleTop"/>
4、获取到后台返回的参数后愉快地吊起微信支付吧
package com.xxx.xxx.bean;
import com.google.gson.annotations.SerializedName;
/**
* @description: 微信支付回调
* @Author zsj on 2017/5/3 14:22.
*/
public class WxPayBean {
/**
* noncestr : xx
* prepayid : xx
* sign : xxx
* package : x=xx
* timestamp : xx
* partnerid : xx
*/
private String noncestr;
private String prepayid;
private String sign;
@SerializedName("package")
private String packageX;
private String timestamp;
private String partnerid;
public String getNoncestr() {
return noncestr;
}
public void setNoncestr(String noncestr) {
this.noncestr = noncestr;
}
public String getPrepayid() {
return prepayid;
}
public void setPrepayid(String prepayid) {
this.prepayid = prepayid;
}
public String getSign() {
return sign;
}
public void setSign(String sign) {
this.sign = sign;
}
public String getPackageX() {
return packageX;
}
public void setPackageX(String packageX) {
this.packageX = packageX;
}
public String getTimestamp() {
return timestamp;
}
public void setTimestamp(String timestamp) {
this.timestamp = timestamp;
}
public String getPartnerid() {
return partnerid;
}
public void setPartnerid(String partnerid) {
this.partnerid = partnerid;
}
}
//微信支付
private void weChatPay(WxPayBean data) {
IWXAPI api = WXAPIFactory.createWXAPI(this, Constant.WXAPP_ID);
api.registerApp(Constant.WXAPP_ID);
PayReq payrequest = new PayReq();
payrequest.appId = Constant.WXAPP_ID;
payrequest.partnerId = data.getPartnerid();
payrequest.prepayId = data.getPrepayid();
payrequest.packageValue = data.getPackageX();
payrequest.nonceStr = data.getNoncestr();
payrequest.timeStamp = data.getTimestamp();
payrequest.sign = data.getSign();
//最后发起请求
api.sendReq(payrequest);
}
四、就是这样了。good job