NSK
NSK
  • 发布:2016-03-22 16:29
  • 更新:2016-05-13 17:58
  • 阅读:6606

微信支付问题

分类:HTML5+

每次都返回

{"code":-100,"message":"[payment微信:-1]General errors"}

这个错误,服务端生成的参数和官方的一模一样,但是就是返回错误。换成官方的就可以。。。这是什么鬼


这是官方的。。。。


这是我的

2016-03-22 16:29 负责人:无 分享
已邀请:
Android_磊子

Android_磊子

微信支付、分享、登陆说明
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为包名

  • NSK (作者)

    服务端也能成功生成,app端报上面的错误。。。但是把服务端生成的支付字符串换成官方的就能成功唤起支付。。。。签名包名什么的也检查了,签名用的d382d671c6672cba4b87980992cd9d77。。。论坛里说这个就是基座APP的签名。。但是还是不成功

    2016-03-23 09:26

好烟

好烟

如果服务端已经成功生成了支付字符串,那么就考虑别的原因:
1,微信支付不能真机调试,只能打包安装测试,因为要获取你app的真实签名,真机调试用的是dcloud的调试基座app的签名
2,打包测试不通过,调查微信开放平台设置的包名,签名跟你现在打包好的安装包的包名和签名是否一致
3,支付不通过分很多种的,你没说你具体测试到了那一步,有报错误编码么?

  • NSK (作者)

    服务端也能成功生成,app端报上面的错误。。。但是把服务端生成的支付字符串换成官方的就能成功唤起支付。。。。签名包名什么的也检查了,签名用的d382d671c6672cba4b87980992cd9d77。。。论坛里说这个就是基座APP的签名。。但是还是不成功

    2016-03-23 09:26

  • 好烟

    换成自己的私有签名,重新打包提取正确的签名和包名之后再进行测试

    2016-03-24 16:18

  • 好烟

    你就最后一步了,就是前端签名跟微信开放平台的签名信息对不上

    2016-03-24 16:18

zeros

zeros

遇到同样问题, 不知你是如何解决?

  1. 云打包包名和签名与微信开放平台包名签名一致
  2. appid已在manifest.json配置
  3. 服务端签名与微信提供的调试工具对比也一致(https://pay.weixin.qq.com/wiki/tools/signverify/)

@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;  
        }

该问题目前已经被锁定, 无法添加新回复