微信支付客户端实现流程

来源:互联网 发布:淘宝3c证书 编辑:程序博客网 时间:2024/05/22 08:15

前期准备:

                1)注册微信开放平台账号

                2)认证开发者资质

                3)创建APP并提交审核

1)2)3)三个流程约7个工作日;

        4)提交资料申请微信支付

5)启动设计和开发

4)5)约3~7个工作日;

6)开户成功,登录商户平台进行验证

7)在线签署协议

8)成功接入微信支付


客户端实现:

准备:

1)微信支付的APPID
2)添加微信支付的jar包或依赖
3)一个Activity类 >>> WXPayEntryActivity.java

第1步:

           导入微信支付SDK:

    compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'

第2步:

         在对应的目录下创建一个“wxapi目录”,在wxapi目录下创建一个WXPayEntryActivity类继承Activity并实现IWXAPIEventHandler ;

           具体代码如下,仅供参考:

public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {
    private static final String TAG = "WXPayEntryActivity";
    private IWXAPI mWXApi;
    private static PayReq req = new PayReq();


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //订单参数数据
        String goodsOrder = null;
        //商品类型
        String buyType = null;


        //接收数据
        Bundle bundle = this.getIntent().getExtras();
        //接收phoneNumber值
        String buyType1 = bundle.getString("goods", "");
        String buyType2 = bundle.getString("magazine", "");
        if (!"".equals(buyType1)) {
            buyType = buyType1;
        } else if (!"".equals(buyType2)) {
            buyType = buyType2;
        }


        Gson gson = new Gson();


        if (GoodSType.GOOD_TYPE1.equals(buyType)) {//购买1
            goodsOrder = AccessSPFile.getGoodsOrderSP(this);
            //订单信息
            Log.d("BOM-眼镜", goodsOrder.toString());
            GoodsOrderBean goodsOrderBean = gson.fromJson(goodsOrder, GoodsOrderBean.class);


            //判断是否安装微信
            if (goodsOrderBean.getResult() != null) {
                boolean wxAppInstalledAndSupported = isWXAppInstalledAndSupported(goodsOrderBean.getResult().getAppid());
                if (wxAppInstalledAndSupported) {
                    req = buyGlass(goodsOrderBean);
                } else {
                    Toast.makeText(this, "请安装微信", Toast.LENGTH_SHORT).show();
                    finish();
                }
            }


        } else if (GoodSType.GOOD_TYPE2.equals(buyType)) {//购买2
            goodsOrder = AccessSPFile.getMagazineOrderSP(this);
            //订单信息
            Log.d("BOM-炸弹", goodsOrder.toString());
            MagazineBuyBean goodsOrderBean = gson.fromJson(goodsOrder, MagazineBuyBean.class);


            //判断是否安装微信
            if (goodsOrderBean.getResult() != null) {
                boolean wxAppInstalledAndSupported = isWXAppInstalledAndSupported(goodsOrderBean.getResult().getAppid());
                if (wxAppInstalledAndSupported) {
                    req = buyMagazine(goodsOrderBean);
                } else {
                    Toast.makeText(this, "请安装微信", Toast.LENGTH_SHORT).show();
                    finish();
                }
            }


        }


        if (req != null) {
            if (mWXApi != null) {
                mWXApi.sendReq(req);
            }
        }


        if (mWXApi != null) {
            mWXApi.handleIntent(getIntent(), this);
        }
    }


    private PayReq buyMagazine(MagazineBuyBean goodsOrderBean) {
        PayReq req = new PayReq();


        String packageX = goodsOrderBean.getResult().getPackageX();
        String appid1 = goodsOrderBean.getResult().getAppid();
        String noncestr = goodsOrderBean.getResult().getNoncestr();
        String partnerid = goodsOrderBean.getResult().getPartnerid();
        String prepayid = goodsOrderBean.getResult().getPrepayid();
        String sign = goodsOrderBean.getResult().getSign();
        String timestamp = goodsOrderBean.getResult().getTimestamp();


        //向微信终端注册应用的APPID
        String appid = goodsOrderBean.getResult().getAppid();
        mWXApi = WXAPIFactory.createWXAPI(this, appid);
        mWXApi.registerApp(appid);


        //生成支付参数
        req.appId = goodsOrderBean.getResult().getAppid();
        req.partnerId = goodsOrderBean.getResult().getPartnerid();
        req.prepayId = goodsOrderBean.getResult().getPrepayid();
        req.packageValue = goodsOrderBean.getResult().getPackageX();
        req.nonceStr = goodsOrderBean.getResult().getNoncestr();
        req.timeStamp = goodsOrderBean.getResult().getTimestamp();
        req.sign = goodsOrderBean.getResult().getSign();


        return req;
    }


    private PayReq buyGlass(GoodsOrderBean goodsOrderBean) {
        PayReq req = new PayReq();

        String packageX = goodsOrderBean.getResult().getPackageX();
        String appid1 = goodsOrderBean.getResult().getAppid();
        String noncestr = goodsOrderBean.getResult().getNoncestr();
        String partnerid = goodsOrderBean.getResult().getPartnerid();
        String prepayid = goodsOrderBean.getResult().getPrepayid();
        String sign = goodsOrderBean.getResult().getSign();
        String timestamp = goodsOrderBean.getResult().getTimestamp();


        //向微信终端注册应用的APPID
        String appid = goodsOrderBean.getResult().getAppid();
        mWXApi = WXAPIFactory.createWXAPI(this, appid);
        mWXApi.registerApp(appid);


        //生成支付参数
        req.appId = goodsOrderBean.getResult().getAppid();
        req.partnerId = goodsOrderBean.getResult().getPartnerid();
        req.prepayId = goodsOrderBean.getResult().getPrepayid();
        req.packageValue = goodsOrderBean.getResult().getPackageX();
        req.nonceStr = goodsOrderBean.getResult().getNoncestr();
        req.timeStamp = goodsOrderBean.getResult().getTimestamp();
        req.sign = goodsOrderBean.getResult().getSign();


        return req;
    }


    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        setIntent(intent);
        mWXApi.handleIntent(intent, this);
    }


    @Override
    public void onReq(BaseReq baseReq) {
    }


    /*
        第三方应用发送到微信的请求
        处理后的响应结果
        会回调该方法
        @param  0:成功
        @param  -1:支付失败
        @param  -2:取消
     */
    @Override
    public void onResp(BaseResp baseResp) {
        if (baseResp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {


            if (baseResp.errCode == 0) {
                //支付成功
                Toast.makeText(this, "支付成功", Toast.LENGTH_SHORT).show();
finsh();
            } else if (baseResp.errCode == -2) {
                Toast.makeText(this, "支付取消", Toast.LENGTH_SHORT).show();
                finish();
            } else {
                Toast.makeText(this, "支付失败", Toast.LENGTH_SHORT).show();
                finish();
            }
        } else {
            finish();
        }
    }

    //判断是否安装微信
    private boolean isWXAppInstalledAndSupported(String appid) {
        IWXAPI msgApi = WXAPIFactory.createWXAPI(WXPayEntryActivity.this, null);
        if (appid != null) {
            msgApi.registerApp(appid);
        }


        boolean sIsWXAppInstalledAndSupported = msgApi.isWXAppInstalled()
                && msgApi.isWXAppSupportAPI();


        return sIsWXAppInstalledAndSupported;
    }
}

原创粉丝点击