每次都返回
{"code":-100,"message":"[payment微信:-1]General errors"}
这个错误,服务端生成的参数和官方的一模一样,但是就是返回错误。换成官方的就可以。。。这是什么鬼
这是官方的。。。。
这是我的
微信支付、分享、登陆说明
1,查看appid是否配置(离线打包在AndroidManifest.xml配置,云打包在manifest.json配置)
2,申请appid时所用证书签名与apk的签名证书必须一致
3,申请appid时填写包名与打包时候所填写包名必须一致
4,查看提示错误代码、信息
5,使用IDE自带HBuilder调试HelloH5中支付模块是否能够成功
6,对比客户端js代码、服务器代码是否匹配
7,服务器下发的json需要对json里的key进行字母排序,排序后生成sign(参考https://github.com/dcloudio/H5P.Server/tree/master/payment)
8, 开发平台配置的包名与签名跟apk的签名文件是否一致
9,服务生成订单时设置的appid、appkey等参数是否正确
离线打包不能正确回调还请检查是否存在并在AndroidManifest.xml配置了如下Activity:(manifest节点package属性为包名)
a,微信支付依赖 【包名】.wxapi.WXPayEntryActivity 如:io.dcloud.HBuilder.wxapi.WXPayEntryActivity 其中io.dcloud.HBuilder为包名
b,微信分享,微信登陆依赖 【包名】.wxapi.WXEntryActivity 如:io.dcloud.HBuilder.wxapi.WXEntryActivity 其中io.dcloud.HBuilder为包名
如果服务端已经成功生成了支付字符串,那么就考虑别的原因:
1,微信支付不能真机调试,只能打包安装测试,因为要获取你app的真实签名,真机调试用的是dcloud的调试基座app的签名
2,打包测试不通过,调查微信开放平台设置的包名,签名跟你现在打包好的安装包的包名和签名是否一致
3,支付不通过分很多种的,你没说你具体测试到了那一步,有报错误编码么?
遇到同样问题, 不知你是如何解决?
@DCloud_Android_磊子 你列举的那几点, 都检查过了, 没问题.
但始终调不起微信支付.(换成hbuild基座, 调用官方数据http://demo.dcloud.net.cn/payment/wxpayv3.HBuilder/?total=1可以唤出, 说明我的客户端代码没问题)
服务端C#代码如下:
/// <summary>
/// 调用统一下单,获得下单结果
/// </summary>
/// <param name="orderNo"></param>
/// <param name="goodsName"></param>
/// <param name="notify_url"></param>
/// <returns></returns>
public void GetUnifiedOrderResult(WXArgs args)
{
//统一下单
WxPayData data = new WxPayData();
data.SetValue("appid", _config.AppId); //微信开放平台审核通过的应用APPID
data.SetValue("mch_id", _config.Mchid); //微信支付分配的商户号
data.SetValue("device_info", "WEB"); //终端设备号(门店号或收银设备ID),默认请传"WEB"
data.SetValue("nonce_str", WxPayApi.GenerateNonceStr());
data.SetValue("body", args.Body);
data.SetValue("detail", args.Detail);
data.SetValue("out_trade_no", args.Out_trade_no);
data.SetValue("fee_type", args.Fee_type);
data.SetValue("total_fee", ZETA.Comm.LibSysUtils.ToInt32(args.Total_fee));
data.SetValue("spbill_create_ip", "127.0.0.1"); //用户端实际ip
data.SetValue("time_start", DateTime.Now.ToString("yyyyMMddHHmmss"));
data.SetValue("time_expire", DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss"));
data.SetValue("trade_type", "APP");
data.SetValue("notify_url", args.Notify_url);
data.SetValue("sign", data.MakeSign(_config.Key));
WxPayData result = WxPayApi.UnifiedOrder(_config, data);
if (!result.IsSet("appid") || !result.IsSet("prepay_id") || result.GetValue("prepay_id").ToString() == "")
{
Log.Error(this.GetType().ToString(), "UnifiedOrder response error by app pay!");
throw new WxPayException("UnifiedOrder response error by app pay!");
}
unifiedOrderResult = result;
}
/// <summary>
/// 从统一下单成功返回的数据中获取调起APP支付所需的参数,
/// </summary>
/// <returns></returns>
public string GetAppParameters()
{
Log.Debug(this.GetType().ToString(), "AppPay::GetAppParam is processing...");
WxPayData jsApiParam = new WxPayData();
jsApiParam.SetValue("appId", unifiedOrderResult.GetValue("appid"));
jsApiParam.SetValue("partnerid", unifiedOrderResult.GetValue("mch_id"));
jsApiParam.SetValue("prepayid", unifiedOrderResult.GetValue("prepay_id"));
jsApiParam.SetValue("package", "Sign=WXPay");
jsApiParam.SetValue("noncestr", unifiedOrderResult.GetValue("nonce_str"));
jsApiParam.SetValue("timestamp", WxPayApi.GenerateTimeStamp());
jsApiParam.SetValue("sign", jsApiParam.MakeSign(_config.Key));
string parameters = jsApiParam.ToJson();
Log.Debug(this.GetType().ToString(), "Get jsApiParam : " + parameters);
return parameters;
}
NSK (作者)
服务端也能成功生成,app端报上面的错误。。。但是把服务端生成的支付字符串换成官方的就能成功唤起支付。。。。签名包名什么的也检查了,签名用的d382d671c6672cba4b87980992cd9d77。。。论坛里说这个就是基座APP的签名。。但是还是不成功
2016-03-23 09:26