android集成微信支付

来源:互联网 发布:数据挖掘 常用模型 编辑:程序博客网 时间:2024/05/05 19:12

这里分享下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

2 0