android集成微信支付

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值