详解微信支付开发流程以及开发中遇到的问题

一.   微信开发步骤:

1.申请微信开发者账号
传送门:点击打开链接

2.准备工作(AppID,签名,库,build.gradle的配置)
传送门:点击打开链接

 2.1下载库和demo

 2.2 导入库


 2.3  build.gradle配置


3.导入demo中的 wxapi 的类 

注意:wxapi放的位置一定要对,名字不能改。



4.支付界面(先把APP注册到微信)


5.微信支付的业务流程(五星重点!!!仔细认真看)

附一张官方流程图
APP支付时序图



5.微信支付具体操作 

   5.1用户点击了下订单按钮, 把订单的信息打包传给后台,怎么和后台交互很多种   方式,就不一一列举了。

    1.一般是APP端用httppost请求方式把订单参数传给后台

   2.后台拿到订单信息之后和微信交互(步骤二)。

   3.生成一个预支付订单返回给APP端。(步骤三)。

   4.APP端拿到预支付订单之后调起微信支付(步骤四)

/**
 * 用户下订单
 */
private void userOrder(final String goodsName, final int price, final int count, final int weixinPay, final int userCode) {
    Utils.showDialog(this, "正在支付...");
    UserOrderInputEntity entity = new UserOrderInputEntity();
    entity.setToken("koNNLOadBdYow1voYok1hyweI0NDemVz");
    entity.setAmount("0.01");
    entity.setCount("1");
    entity.setGoodID("1");
    entity.setGoodsDetail("\\U57fa\\U7840\\U4f1a\\U5458");
    entity.setOrderFrom(2);
    entity.setOrderType(2);
    entity.setUserAddressID("0");
    entity.setPurchaseID("0");
    entity.setPayChannel("2");
    ApiService.instance().callApi(entity, new OnApiResultListener() {
        @Override
        public void handleApiResult(final int result, final BaseApiResultEntity resultEntity, final Object extra) {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Message msg = new Message();
                    msg.what = 1;
                    UserOrderResultEntity resultObj = (UserOrderResultEntity) resultEntity;
                    if (result == ApiService.API_HANDLER_API_SUCCESS) {
                        msg.obj = resultObj;
                    } else if (result == ApiService.API_HANDLER_API_FAILURE) {
                        msg.obj = resultObj;
                    }
                    mHandlers.sendMessage(msg);



                }
            });


        }
    }, null);

}
private void weXinPay( UserOrderResultEntity orderInfo) {
    MyApplication.mHandler = mPayRespHandler;
    PayReq request = new PayReq();
    try {
        request.appId = orderInfo.getAppID();
        request.partnerId = orderInfo.getPartneridID();
        request.prepayId =orderInfo.getPrepayID();
        request.packageValue =  "Sign=WXPay";
        request.nonceStr = orderInfo.getNonceStr();
        request.timeStamp = orderInfo.getTimestamp();
        request.sign =orderInfo.getSign();
        api.sendReq(request);
    }catch(Exception e){
        Toast.makeText(OrderActivity.this, "异常:"+e.getMessage(), Toast.LENGTH_SHORT).show();
    }

    Toast.makeText(OrderActivity.this, "微信支付跳转中", Toast.LENGTH_SHORT).show();

}


private Handler mHandlers = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
        switch (msg.what) {
            case 1:
                Utils.dismissDialog();
                UserOrderResultEntity resultObj = (UserOrderResultEntity) msg.obj;
                weXinPay(resultObj);
                showAlertDialog();
                break;
        }
    }
};

猜你喜欢

转载自blog.csdn.net/qq_34927117/article/details/60867065