收藏
回答

支付成功的onResp回调里transaction字段为空

当我发起微信支付,支付成功后,返回商家(返回我们自己的app),WXPayEntryActivity的onResp回调里的transaction字段值为空,但是errCode为0,那么是代表支付是成功了,但是这个支付单号transaction值为什么会是null,是哪里还需要其他设置吗?还是说支付成功后,微信只会返回给客户端支付接过,并不会返回支付成功后的支付单号?求解

@Override
    public void onResp(BaseResp baseResp) {
        Log.d("com.shgame.sszm","支付结果回调:"+baseResp.getType()+"  "+baseResp.transaction);
        if (baseResp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX)
        {
            SHMainActivity.CurActivity.OnNotifyWXPayResult(baseResp);
            if(baseResp.errCode == 0)
            {
                Log.d("com.shgame.sszm","支付成功:"+baseResp.transaction+"  "+baseResp.errStr+"  "+
                baseResp.openId);
                Toast.makeText(this,"支付成功:"+baseResp.transaction,Toast.LENGTH_LONG);
            }else if(baseResp.errCode == -2)
            {
                //支付取消
                Log.d("com.shgame.sszm","支付取消:"+baseResp.errCode);
                Toast.makeText(this,"支付取消:"+baseResp.errCode,Toast.LENGTH_LONG);
            }
            else{
                Log.d("com.shgame.sszm","支付失败:"+baseResp.errCode);
                Toast.makeText(this,"支付失败:"+baseResp.errCode,Toast.LENGTH_LONG);
            }
            finish();
        }
    }


回答关注问题邀请回答
收藏

2 个回答

  • Vampire ___
    Vampire ___
    2022-02-17

    我也遇到这个问题了 取消支付 BaseResp里的openId和transaction字段都是null

    2022-02-17
    有用
    回复
  • 微信支付技术助手7
    微信支付技术助手7
    2019-03-18

    您好,详细描述一下您的问题,并且提供一下您的请求参数。

    2019-03-18
    有用
    回复 6
    • UnityCoyote
      UnityCoyote
      2019-03-18

      问题是这样的,安卓端发起微信支付,支付成功,商户后台也收到了一比订单。在点击返回商家,也就是返回我们自己的app,微信会自动调用onResp,onResp回调回来的参数baseResp实例中,transaction,openId这两个字段值是空的.我想请问下支付成功后这个回调是可以取到订单号的值吗?

      public class WXPayEntryActivity extends Activity  implements IWXAPIEventHandler {
       
          //应用的AppID
          private final String WX_APPID = "wx2437d2c332335c85";
          private IWXAPI WxApi;
          @Override
          public void onCreate(Bundle savedInstanceState)
          {
              super.onCreate(savedInstanceState);
              WxApi = WXAPIFactory.createWXAPI(this,WX_APPID);
              WxApi.handleIntent(getIntent(),this);
          }
          @Override
          protected void onNewIntent(Intent intent)
          {
              super.onNewIntent(intent);
              setIntent(intent);
              WxApi.handleIntent(intent,this);
          }
       
          @Override
          public void onReq(BaseReq baseReq) {
       
          }
       
          @Override
          public void onResp(BaseResp baseResp) {
              Log.d("com.shgame.sszm","支付结果回调:"+baseResp.getType()+"  "+baseResp.transaction);
              if (baseResp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX)
              {
                  SHMainActivity.CurActivity.OnNotifyWXPayResult(baseResp);
                  if(baseResp.errCode == 0)
                  {
                      Log.d("com.shgame.sszm","支付成功:"+baseResp.transaction+"  "+baseResp.errStr+"  "+
                      baseResp.openId);
                      Toast.makeText(this,"支付成功:"+baseResp.transaction,Toast.LENGTH_LONG);
                  }else if(baseResp.errCode == -2)
                  {
                      //支付取消
                      Log.d("com.shgame.sszm","支付取消:"+baseResp.errCode);
                      Toast.makeText(this,"支付取消:"+baseResp.errCode,Toast.LENGTH_LONG);
                  }
                  else{
                      Log.d("com.shgame.sszm","支付失败:"+baseResp.errCode);
                      Toast.makeText(this,"支付失败:"+baseResp.errCode,Toast.LENGTH_LONG);
                  }
                  finish();
              }
          }
      }


      2019-03-18
      回复
    • 微信支付技术助手7
      微信支付技术助手7
      2019-03-18回复UnityCoyote

      您好,也就是说调起支付后回调的信息没有上面的两个字段信息,您把您post接口请求参数发给我。

      2019-03-18
      回复
    • UnityCoyote
      UnityCoyote
      2019-03-18回复微信支付技术助手7

      服务端post请求统一下单的参数:

      mapParamter["appid"]            = STR_WEIXIN_APPID;
          mapParamter["body"]             = data.m_strGoodsDesc;
          mapParamter["mch_id"]           = STR_WEIXIN_MCHID;
           
          int nRandom = GenWeiXin_NONCE();    // 随机值,让每次的sign不同
          sprintf(szTransBuff, "%d", nRandom);
          mapParamter["nonce_str"]        = szTransBuff;
       
          std::string strOutTradeNo       = GenWeiXin_OutTradeNo(data.m_charOid); // 当前时间与charoid拼接的字符串
          pPlayer->SetWeixinOutTradeNo(strOutTradeNo);
          mapParamter["out_trade_no"]     = strOutTradeNo;
       
          sprintf(szTransBuff, "%d", int(pRmbShopTplt->goods_price * 100));
          mapParamter["total_fee"]        = szTransBuff;
       
          mapParamter["spbill_create_ip"] = data.m_charIp;
          mapParamter["notify_url"]       = s_str_weixin_notify_url;
          mapParamter["trade_type"]       = "APP";
       
          sprintf(szTransBuff, "%d", data.m_goodsId);
          mapParamter["attach"]           = szTransBuff;  // 附加数据保存的是商品ID

      客户端请求支付的参数:

      PayReq pay = new PayReq();
      pay.appId = WX_APPID;
      pay.prepayId = prepayId;
      pay.nonceStr = nonceStr;
      pay.partnerId = partnerId;
      pay.timeStamp = timeStamp;
      pay.sign = sign;
      pay.packageValue = packageVal;
      boolean isSuccess = WxApi.sendReq(pay);


      2019-03-18
      回复
    • 微信支付技术助手7
      微信支付技术助手7
      2019-03-18回复UnityCoyote

      您好,我需要的是数据,并非代码。

      2019-03-18
      回复
    • UnityCoyote
      UnityCoyote
      2019-03-18回复微信支付技术助手7

      谢谢回复,现在已经跟服务器那边商量和实现了,使用商户订单号来做订单验证,不使用微信订单号来验证。当前我们使用第二种方式来验证订单也可以达到我们的要求


      2019-03-18
      1
      回复
    查看更多(1)
登录 后发表内容