美文网首页
微信支付总结

微信支付总结

作者: wt龙 | 来源:发表于2017-08-02 11:31 被阅读32次

    讲道理,微信支付确实做过好多次了。但是我却没有正八经的梳理过流程
    最近算是被坑了。在次记录

    1. 微信开发者平台申请appId ,这个无需多言。
    2. 在 .wxapi包下放入 WXPayEntryActivity.class;用来接收回调结果,别忘了在AndroidManifest清单文件中注册 。
    3. 调起支付接口:
      首先第一点,将价格和ip传给服务器。获取服务器返回的一系列值 :
      appId、partnerId、prepayId、nonceStr、timeStamp、
      packageValue为固定值 “Sign=WXPay”;
      我的坑就是在接下来,因为我们还要向服务器传递一个sign .然后这个sign值是需要将之前的几个值拼起来,然后在和商户秘钥拼接起来,我们一起的做法都是服务器拼接起来,返给我们然后直接传递给微信。然而这一次我却栽在了这里,我这边这个后台是个新手,而且你说话他都随便应付你。我反复问他sign是不是,拼接起来的。他说是。然后我就没有多管,然而就是调不起微信支付。然后我自己也拼接了一遍。确实也没调起来。后来我重启手机,又调用了一次。成功了。然后在问后台,他又给我说他以为微信服务器给拼接了。

    无语中啊。。。。

    其实支付的大部分功能都在服务器端。后台把我们的数据提交给微信服务器, 还是需要在把数据拼接一个sign前面的。

    终端需要注意的 :
     1 .核对是否是打包好的签名 和我们填写的包名
     2. appId 注意是否写正确了
     3. WXPayEntryActivity.class的位置。一定是在 .wxapi包下。
     4. 别忘了在清单文件中注册回调activity
     5. 这个sign签名,我是在再不用后台给我拼了。自己搞
    

    调起支付及sing拼接代码

         IWXAPI api = WXAPIFactory.createWXAPI(this, "***********", false);
            api.registerApp("***********");
    
    
            WxEntity.DataBean data = wxEntity.getData();
            PayReq payReq = new PayReq();
            payReq.appId = data.getAppId();
            payReq.partnerId = data.getMchId();
            payReq.prepayId = data.getPrePayId();
            payReq.nonceStr = data.getNonceStr();
            payReq.timeStamp = data.getTimestamp();
            payReq.packageValue = "Sign=WXPay";
            //  payReq.sign = data.getSign();
    
            String stringA =
                    "appid=" + data.getAppId()
                            + "&noncestr=" + data.getNonceStr()
                            + "&package=" + "Sign=WXPay"
                            + "&partnerid=" + data.getMchId()
                            + "&prepayid=" + data.getPrePayId()
                            + "&timestamp=" + data.getTimestamp();
    
            String stringSignTemp = stringA + "&key=" + "aqkdlpondbzSkpNdopMMqaHJKLpoKjLm";
            String sign = MD5.getMessageDigest(stringSignTemp.getBytes()).toUpperCase();
            Log.i("Sign-->", sign);
            payReq.sign = sign;
            api.sendReq(payReq);
    
    

    WXPayEntryActivity .class

    
    public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {
    
        private static final String TAG = "MicroMsg.SDKSample.WXPayEntryActivity";
    
        private IWXAPI api;
        public static final int ERRCODE_OK = 0;                 //支付成功的返回码
        public static final int ERRCODE_NO = -1;                //支付失败的
        public static final int ERRCODE_CANCEL = -2;            //用户取消支付
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.pay_result);
            //这里填写自己的APPID
            api = WXAPIFactory.createWXAPI(this, "wxb872a94f23cc21a0");
            api.handleIntent(getIntent(), this);
        }
    
        @Override
        protected void onNewIntent(Intent intent) {
            super.onNewIntent(intent);
            setIntent(intent);
            api.handleIntent(intent, this);
        }
    
        @Override
        public void onReq(BaseReq req) {
        }
    
        @Override
        public void onResp(BaseResp resp) {
            //在这个方法中接收回调
            
            Log.i("TAG", "PayResult-->" + resp.errCode);
            String s = "";
            switch (resp.errCode) {
                case ERRCODE_OK://支付成功的返回码
    
    
                    EventBus.getDefault().post(new WxPaySuccessEntity(true));
                    break;
                case ERRCODE_NO:  //支付失败的
    
                    s = "支付失败";
    
                    break;
                case ERRCODE_CANCEL://用户取消支付
    
                    s = "取消支付";
    
                    break;
            }
            //   BxUtil.showMessage(WXPayEntryActivity.this, s);
            finish();
    
        }
    
    }
    
    

    相关文章

      网友评论

          本文标题:微信支付总结

          本文链接:https://www.haomeiwen.com/subject/oyyelxtx.html