微信支付的相关步骤

微信支付的相关步骤

公司的要求是接入微信支付,但是之前没怎么接触,这里记录下。
申请注册审核的步骤都已经省略,这些工作,在项目开始的时候就需要开始进行申请,因为微信的审核期炒鸡长,而且这中间还可能回因为某些原因被拒。所以需要提前做好准备。
下面这些是步骤哪些:
1. 首先拿到你的AppId(这个值是申请成功了之后微信给你的);
2. 下载demo,微信支付给你的demo,主要是拿到里面的包。就这两个
这里写图片描述
文件夹下wechat-sdk-android-with-mta-1.0.2.jar在开发联调环境中使用。
3. 你需要在你的app根文件目录下,有这么一个文件目录:
,微信的要求,不要问为什么。
4. 在文件目录下有这个一个文件,整个拷贝过来:
这里写图片描述

,这也是微信的要求整个拷贝过来。
具体的功能稍后再讲。
5. 做好了基本的准备功能,下面这里的是具体的调用步骤:
6. 新建一个bean类,WXPayBean.java.。特别说一下,这里的参数,是后台哪边返回的,具体的值,由后台哪边定,基本上就这么点

public class WXPayBean  implements Serializable {

    private String appid;
    private String mchId;
    private String nonceStr;
    private String prepayId;
    private String resultCode;
    private String returnCode;
    private String returnMsg;
    private String sign;
    private String timeStamp;
    private String tradeType;
    private  String packageValue;


    public String getPackageValue() {
        return packageValue;
    }

    public void setPackageValue(String packageValue) {
        this.packageValue = packageValue;
    }

    public String getAppid() {
        return appid;
    }

    public void setAppid(String appid) {
        this.appid = appid;
    }

    public String getMchId() {
        return mchId;
    }

    public void setMchId(String mchId) {
        this.mchId = mchId;
    }

    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 getResultCode() {
        return resultCode;
    }

    public void setResultCode(String resultCode) {
        this.resultCode = resultCode;
    }

    public String getReturnCode() {
        return returnCode;
    }

    public void setReturnCode(String returnCode) {
        this.returnCode = returnCode;
    }

    public String getReturnMsg() {
        return returnMsg;
    }

    public void setReturnMsg(String returnMsg) {
        this.returnMsg = returnMsg;
    }

    public String getSign() {
        return sign;
    }

    public void setSign(String sign) {
        this.sign = sign;
    }

    public String getTimeStamp() {
        return timeStamp;
    }

    public void setTimeStamp(String timeStamp) {
        this.timeStamp = timeStamp;
    }

    public String getTradeType() {
        return tradeType;
    }

    public void setTradeType(String tradeType) {
        this.tradeType = tradeType;
    }
}
  1. 接下来,是请求后台的接口,然后对后台接口返回值进行操作。这里是自己封装的请求
    Ordernumber,是自己项目的订单编号。
 final IWXAPI api = WXAPIFactory.createWXAPI(this, Constants.APP_ID,false);
 api.registerApp(Constants.APP_ID);  将微信返回给你的AppId值带进去就好了。

onResponse 是请求成功以后返回的值。将object 的类型转换为你之前见的bean类。
取出返回的数据。
appId,这个值可以自己取,也可以用之前的固定值
mchId 、这里注意下,微信的小坑。 你看微信的文档时候,https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1
在ApI列表里面,统一下单和调起支付接口的请求参数,都是商户号,但是商户号的值竟然不一样。 Partnered 和mch_id

主要代码就是这一点:

PayReq req = new PayReq();
       req.appId =appId;
       req.partnerId =mchId;
       req.prepayId = prepayId;
       req.nonceStr = nonceStr;
       req.timeStamp=wxContent.getTimeStamp();
       req.sign = sign;
       req.packageValue=wxContent.getPackageValue();
       api.sendReq(req);
  //微信支付
 public  void WXPay(String orderNumber) {
  final IWXAPI api = WXAPIFactory.createWXAPI(this,Constants.APP_ID,false);
         api.registerApp(Constants.APP_ID);
         HttpPostAsyn  asyn=new HttpPostAsyn(ApiConfig.PATH_USER);
         asyn.addParamters("action","unified_order");
         asyn.addParamters("body","项目名称-"+categoryName);
         asyn.addParamters("price",totalPrice+"");
         asyn.addParamters("outtradeno",orderNumber);
         asyn.addCallBack(new HttpCallBack() {
   @Override
 public void onFailure(CustomizException e) throws Exception {
               Log.e("tag",e.getErrorMsg());
            }
  @Override
 public void onResponse(Object object1) throws Exception {
                WXPayBean wxContent = (WXPayBean) object1;
                if(wxContent!=null){
                    String appId = wxContent.getAppid();
                    String mchId = wxContent.getMchId();
                    String prepayId = wxContent.getPrepayId();
                    String nonceStr = wxContent.getNonceStr();
                    String sign = wxContent.getSign();
                    try {
                        PayReq req = new PayReq();
                        req.appId =appId;
                        req.partnerId =mchId;
                        req.prepayId = prepayId;
                        req.nonceStr = nonceStr;
                        req.timeStamp=wxContent.getTimeStamp();
                        req.sign = sign;
                               req.packageValue=wxContent.getPackageValue();
//                      Toast.makeText(mContext, "正常调起支付", Toast.LENGTH_SHORT).show();
                        // 在支付之前,如果应用没有注册到微信,应该先调用IWXMsg.registerApp将应用注册到微信
                        api.sendReq(req);
                    } catch (Exception e) {
                        e.printStackTrace();
                        Log.e("tag", "异常:" + e.getMessage());
                        Toast.makeText(mContext, "异常:" + e.getMessage(), Toast.LENGTH_SHORT).show();
                    }

                } else {
                    Toast.makeText(mContext, "服务器请求错误", Toast.LENGTH_SHORT).show();
                }
                }
        });
        OkHttpUtil.HttpAsyn(asyn,WXPayBean.class);
    }
  1. 最后一步,就是第四步的时候,有一个WXPayEntryActivity.java 文件,还记得吧。就这个,这个文件是为了接受第7步,api.sendReq(req); 发过来的数据,根据 resp.errCode的值,来确定你的下一步操作,只有是0的时候,才是正常的,其他的时候,都是非正常的。
    添加判断
@Override
public void onResp(BaseResp resp) {
switch (resp.errCode){
   case 0:
        //请求正常,进行下一步的操作。。。。     
      break;
   case -1:
      UiHelper.Toast(this,"支付异常,请联系商家");
      break;
   case -2:
      UiHelper.Toast(this,"支付取消");
      break;

}
finish();

}

一般-1的时候都是 签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等。这句话说的好笼统,但是微信的文档就是这样,你需要一个个的检查。出现问题,你会发疯,不知道从何下手。
之前我自己做的时候也出现了这种情况,后面把AppId,注册的值等全部检查了下,后面查了下是 签名错误。这个签名一般是后台哪边加签了之后直接给你的,很少自己加签的。

好了,到此结束。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值