美文网首页
微信支付总结

微信支付总结

作者: 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