当我发起微信支付,支付成功后,返回商家(返回我们自己的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(); } } |
我也遇到这个问题了 取消支付 BaseResp里的openId和transaction字段都是null
您好,详细描述一下您的问题,并且提供一下您的请求参数。
问题是这样的,安卓端发起微信支付,支付成功,商户后台也收到了一比订单。在点击返回商家,也就是返回我们自己的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();
}
}
}
您好,也就是说调起支付后回调的信息没有上面的两个字段信息,您把您post接口请求参数发给我。
服务端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);
您好,我需要的是数据,并非代码。
谢谢回复,现在已经跟服务器那边商量和实现了,使用商户订单号来做订单验证,不使用微信订单号来验证。当前我们使用第二种方式来验证订单也可以达到我们的要求