微信支付的相关步骤

微信支付的相关步骤

1.前提准备

  公司的要求是接入微信支付,但是之前没怎么接触,这里记录下。申请注册审核的步骤都已经省略,这些工作,在项目开始的时候就需要开始进行申请,因为微信的审核期炒鸡长,而且这中间还可能回因为某些原因被拒。所以需要提前做好准备。下面这些是步骤:

1.首先拿到你的AppId(这个值是申请成功了之后微信给你的);
2.下载demo,微信支付给你的demo,主要是拿到里面的包。就这两个

准备的安装包

文件夹下wechat-sdk-android-with-mta-1.0.2.jar在开发联调环境中使用。
3.你需要在你的app根文件目录下,有这么一个文件目录:

微信文件包

微信的要求,因为它会自动在你的根目录下检索文件,也就是这个包。

4.在文件目录下有这个一个文件,整个拷贝过来,这也是微信的要求整个拷贝过来。


3.png

2. 开发准备

做好了基本的准备功能,下面这里的是具体的调用步骤:
1.新建一个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 { 
    @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); }

3.最后一步,准备工作的时候有一个拷贝的Activity,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与设置的不匹配、其他异常等。这句话说的好笼统,但是微信的文档就是这样,你需要一个个的检查。出现问题,你会发疯,不知道从何下手。
  之前我自己做的时候也出现了这种情况,这个时候千万不要慌,慢慢检查你的参数:
1.检查你的AppId值,这个值是在注册的时候给你的,所以你要看看你是不是少了,或者错了。
2.检查签名,这里最需要注意了,一般加签我们都是在后台直接传过来的,写在App端加签,不安全,和你的后台好好去对对,多调试几次。(我之前查了一晚上,四个多小时,后面就是后台加签名传错了某个值,然后出现-1.搞的我差点想打死那货,莫名其妙被加了班,那货下班就走了。想想都气人)
3.检查你的代码,一般我们在写代码的时候都是按照文档上来的,这时候也不能马虎,某个值的错误可能会导致你前功尽弃。耐心点吧。

好了,到此结束。
最后祝你不要碰到坑。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,117评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,963评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,897评论 0 240
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,805评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,208评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,535评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,797评论 2 311
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,493评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,215评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,477评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,988评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,325评论 2 252
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,971评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,807评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,544评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,455评论 2 266

推荐阅读更多精彩内容