微信解决微信扫码支付限额额怎么解决 csdn

微信支付遇到的问题总结
& & 微信支付对于andorid和IOS方面其实并不困难,只要按照微信支付文档里面的描述和SDK照搬就好了。可是用C#后台调用的时候就需要注意了。
& & &根据微信支付的业务流程图可以知道后台需要处理三部分的内容:
& & &1.需要提供统一下单API,简单的说就是告诉微信我马上有订单需要支付了,做一个预支付的处理,基本参数就按照说明文档里面必须传的就可以了,微信SDK中有提供WxPayApi.UnifiedOrder类来进行统一下单,我们可以通过调用这个类进行处理,然而问题就在于WxPayApi.UnifiedOrder中有应用到代理服务器,如果没有的话必须把这些代码注释掉,否则会出现操作延时的错误问题。具体注释代码如下:
& & &1)WxPayApi.UnifiedOrder类:
//inputObj.SetValue(&spbill_create_ip&,
WxPayConfig.IP);//终端ip
& & &2)Post函数中的:
//设置代理服务器
& & & & & & & & //WebProxy proxy = new WebProxy(); & & & & & & & & & & & & & & & & //定义一个网关对象
& & & & & & & & //proxy.Address = new Uri(WxPayConfig.PROXY_URL); & //网关服务器端口:端口
& & & & & & & & //request.Proxy =
& & &这边在说下:微信有封装时间戳生成的方法WxPayApi.GenerateTimeStamp();//时间戳,自己就没有必要再去计算,还有APP端需要的数据最好要在后台转换为json格式,否则手机端需要特别去解析XML数据,还有一点需要特别注意:WxPayApi.UnifiedOrder类中有通过&inputObj.SetValue(&sign&,
inputObj.MakeSign());//生成签名 然而统一下单接口返回正常的prepay_id,还需要再次按签名规范重新生成签名后,将数据传输给APP。参与签名的字段名为appId,partnerId,prepayId,nonceStr,timeStamp,package。注意:package的值格式为Sign=WXPay
& &2.商户后台接收支付通知,这个接口主要负责是在app支付后接收微信的通知后更新本地数据库的订单状态,引用微信ResultNotify类中的ProcessNotify()函数,判断是否return_code是否为SUCCESS、return_msg是否为OK,但是有一点需要注意,就是ProcessNotify()函数中通过父类的GetNotifyData()方法接收微信返回的信息处理后重新赋值的,所以我直接在成功返回的模块手动加上out_trade_no和transaction_id方便后续处理,在ProcessNotify()函数的
//查询订单成功模块我的具体代码为:
//notifyData&为通过GetNotifyData()获取到的微信返回数据
代码为:WxPayData notifyData = GetNotifyData();
res = new WxPayData();
& & & & & & & & res.SetValue(&return_code&, &SUCCESS&);
& & & & & & & & res.SetValue(&return_msg&, &OK&);
& & & & & & & & res.SetValue(&out_trade_no&,notifyData.GetValue(&out_trade_no&).ToString());
& & & & & & & & res.SetValue(&transaction_id&,notifyData.GetValue(&transaction_id&).ToString());
& & & & & & & & (this.GetType().ToString(), &order query success : & + res.ToXml());
& & & & & & & &
& & &然后在通知接口中通过
//获取数据
& & & & & & & & string&out_trade_no = wxModel.GetValue(&out_trade_no&).ToString();
& & & & & & & & string transaction_id = wxModel.GetValue(&transaction_id&).ToString();
& & &3.最后就是查询订单,这个步骤按照文档描述基本没有什么问题,APP端传入客户端订单号或者微信订单号,接收到直接可以调用WxPayApi.OrderQuery(WxPayData inputObj, int timeOut = 6)这个函数即可;
我这边是用MVC框架完成的,代码具体也给下,流程走通没什么问题,有类似的朋友可以参考:
一.统一下单接口代码:rest//为自己定义的一个返回model
/// &summary&
& & & & /// 微信-统一下单接口
& & & & /// &/summary&
& & & & /// &param name=&OrderNo&&后台提供的订单号&/param&
& & & & /// &param name=&TotlePrice&&总价格,单位:元&/param&
& & & & /// &returns&&/returns&
& & & & [HttpPost]
& & & & public JsonResult WxUnifieldOrder(string OrderNo,decimal TotlePrice)
& & & & & & #region dinfine
& & & & & & WxPayData payModel = new WxPayData();//传入数据
& & & & & & WxPayData outPayModel = new WxPayData();//微信返回数据
& & & & & & WXUnifieldOrder orderModel = new WXUnifieldOrder();//return to APP
& & & & & & string strNotifyUrl = string.E
& & & & & & int price = 0;
& & & & & & string timestamp = string.E
& & & & & & string strBody = string.E//商品或支付单简要描述
& & & & & & #endregion
& & & & & & try
& & & & & & {
& & & & & & & & #region 值设置
& & & & & & & & strBody = &宜佳智能订单-& + OrderNo;
& & & & & & & & price = Convert.ToInt32(TotlePrice * 100);//单位从元转换为分
& & & & & & & & payModel.SetValue(&out_trade_no&, OrderNo.ToString());//订单号
& & & & & & & & payModel.SetValue(&body&, strBody);//商品或支付单简要描述
& & & & & & & & payModel.SetValue(&total_fee&, price);//总额
& & & & & & & & payModel.SetValue(&trade_type&, &APP&);//支付方式
& & & & & & & & payModel.SetValue(&attach&, strBody);//附加数据,在查询API和支付通知中原样返回
& & & & & & & & //获取配置中的通知链接
& & & & & & & & strNotifyUrl = System.Configuration.ConfigurationManager.AppSettings[&NotifyUrl&];
& & & & & & & & payModel.SetValue(&notify_url&, strNotifyUrl);
& & & & & & & & //payModel.SetValue(&time_start&, DateTime.Now.ToString(&yyyyMMddHHmmss&));
& & & & & & & & //payModel.SetValue(&time_expire&, DateTime.Now.AddMinutes(10).ToString(&yyyyMMddHHmmss&));
& & & & & & & & #endregion
& & & & & & & & outPayModel = WxPayApi.UnifiedOrder(payModel);//调用微信接口获得返回数据
& & & & & & & & #region 将微信的数据赋值给model
& & & & & & & & if (outPayModel != null)
& & & & & & & & {
& & & & & & & & & & string ReturnCode = outPayModel.GetValue(&return_code&).ToString();//返回状态码 SUCCESS/FAIL
& & & & & & & & & & string ReturnMsg = outPayModel.GetValue(&return_msg&).ToString();//返回信息 OK/异常信息
& & & & & & & & & & string ResultCode = outPayModel.GetValue(&result_code&).ToString();//结果状态码 SUCCESS/FAIL
& & & & & & & & & & if (!ReturnMsg.Equals(&OK&))
& & & & & & & & & & {
& & & & & & & & & & & & rest.status = 201;
& & & & & & & & & & & & rest.message = ReturnM
& & & & & & & & & & }
& & & & & & & & & & else if (ReturnCode.Equals(&SUCCESS&) && ResultCode.Equals(&SUCCESS&))
& & & & & & & & & & {
& & & & & & & & & & & & orderModel.appid = outPayModel.GetValue(&appid&).ToString();//公众账号ID
& & & & & & & & & & & & orderModel.noncestr = outPayModel.GetValue(&nonce_str&).ToString();//随机字符串
& & & & & & & & & & & & orderModel.package = &Sign=WXPay&;//扩展字段
& & & & & & & & & & & & orderModel.partnerid = outPayModel.GetValue(&mch_id&).ToString();//商户号
& & & & & & & & & & & & orderModel.prepayid = outPayModel.GetValue(&prepay_id&).ToString();//预支付交易会话ID
& & & & & & & & & & & & timestamp = WxPayApi.GenerateTimeStamp();//时间戳
& & & & & & & & & & & & if (outPayModel.CheckSign())
& & & & & & & & & & & & {
& & & & & & & & & & & & & & WxPayData w = new WxPayData();
& & & & & & & & & & & & & & w.SetValue(&appid&, outPayModel.GetValue(&appid&).ToString());
& & & & & & & & & & & & & & w.SetValue(&partnerid&, outPayModel.GetValue(&mch_id&).ToString());
& & & & & & & & & & & & & & w.SetValue(&prepayid&, outPayModel.GetValue(&prepay_id&).ToString());
& & & & & & & & & & & & & & w.SetValue(&noncestr&, outPayModel.GetValue(&nonce_str&).ToString());
& & & & & & & & & & & & & & w.SetValue(&timestamp&, timestamp.ToString());
& & & & & & & & & & & & & & w.SetValue(&package&, &Sign=WXPay&.ToString());
& & & & & & & & & & & & & & w.SetValue(&sign&, w.MakeSign());
& & & & & & & & & & & & & & if (w.CheckSign())
& & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & orderModel.sign = w.GetValue(&sign&).ToString();//签名
& & & & & & & & & & & & & & }
& & & & & & & & & & & & & & else
& & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & rest.status = 201;
& & & & & & & & & & & & & & & & rest.message = &签名错误&;
& & & & & & & & & & & & & & & & return this.Json(rest, JsonRequestBehavior.AllowGet);
& & & & & & & & & & & & & & }
& & & & & & & & & & & & }
& & & & & & & & & & & & else
& & & & & & & & & & & & {
& & & & & & & & & & & & & & rest.status = 201;
& & & & & & & & & & & & & & rest.message = &签名错误&;
& & & & & & & & & & & & & & return this.Json(rest, JsonRequestBehavior.AllowGet);
& & & & & & & & & & & & }
& & & & & & & & & & & & orderModel.timestamp =
& & & & & & & & & & & & rest.status = 200;
& & & & & & & & & & & & rest.message = &统一下单成功&;
& & & & & & & & & & & & rest.data = orderM
& & & & & & & & & & }
& & & & & & & & & & else
& & & & & & & & & & {
& & & & & & & & & & & & string err_code_des = outPayModel.GetValue(&err_code_des&).ToString();
& & & & & & & & & & & & rest.status = 201;
& & & & & & & & & & & & rest.message = err_code_
& & & & & & & & & & }
& & & & & & & & }
& & & & & & & & else
& & & & & & & & {
& & & & & & & & & & rest.message = &请求错误&;
& & & & & & & & & & rest.status = 201;
& & & & & & & & }
& & & & & & & & #endregion
& & & & & & & & return this.Json(rest, JsonRequestBehavior.AllowGet);
& & & & & & }
& & & & & & catch (Exception)
& & & & & & {
& & & & & & & & rest.status = 201;
& & & & & & & & rest.message = &请求错误&;
& & & & & & & & return this.Json(rest, JsonRequestBehavior.AllowGet);
& & & & & & }
二.接收通知接口代码:
& & & & /// &summary&
& & & & /// 接收微信通知
& & & & /// &/summary&
& & & & public void wx_notify()
& & & & & & try
& & & & & & {
& & & & & & & & ResultNotify resultNotify = new ResultNotify();
& & & & & & & & WxPayData wxModel = new WxPayData();
& & & & & & & & string strResult = string.E
& & & & & & & & //验证微信返回值、赋值
& & & & & & & & wxModel = resultNotify.ProcessNotify();
& & & & & & & & //如果验证成功、操作数据库
& & & & & & & & if (wxModel.IsSet(&return_code&) && wxModel.IsSet(&return_msg&))
& & & & & & & & {
& & & & & & & & & & if (wxModel.GetValue(&return_code&).ToString().Equals(&SUCCESS&) && wxModel.GetValue(&return_msg&).ToString().Equals(&OK&))
& & & & & & & & & & {
& & & & & & & & & & & & //define
& & & & & & & & & & & & DteShopMng.Model.Basic.Order modelOrder = new DteShopMng.Model.Basic.Order();
& & & & & & & & & & & & DteShopMng.BLL.Basic.Order bllOrder = new DteShopMng.BLL.Basic.Order();
& & & & & & & & & & & & string out_trade_no = string.E//后台订单号
& & & & & & & & & & & & string transaction_id = string.E//微信订单号
& & & & & & & & & & & & //获取数据
& & & & & & & & & & & & out_trade_no = wxModel.GetValue(&out_trade_no&).ToString();
& & & & & & & & & & & & transaction_id = wxModel.GetValue(&transaction_id&).ToString();
& & & & & & & & & & & & //查询订单并赋值
& & & & & & & & & & & & modelOrder = bllOrder.GetModelList(& OrderNo='& + out_trade_no + &'&).FirstOrDefault();
& & & & & & & & & & & & if (modelOrder != null)
& & & & & & & & & & & & {
& & & & & & & & & & & & & & #region 数据库操作
& & & & & & & & & & & & & & modelOrder.PayTypeId = 6;
& & & & & & & & & & & & & & modelOrder.PayDate = DateTime.N
& & & & & & & & & & & & & & modelOrder.PayFlag = 1;
& & & & & & & & & & & & & & modelOrder.TradeNo = transaction_
& & & & & & & & & & & & & & bllOrder.Update(modelOrder);
& & & & & & & & & & & & & & DteShopMng.BLL.Basic.OrderOperRecord bllOrderOperRecord = new DteShopMng.BLL.Basic.OrderOperRecord();
& & & & & & & & & & & & & & DteShopMng.Model.Basic.OrderOperRecord modelOrderOperRecord = new DteShopMng.Model.Basic.OrderOperRecord();
& & & & & & & & & & & & & & modelOrderOperRecord.CreateDate = DateTime.N
& & & & & & & & & & & & & & modelOrderOperRecord.OderOperType = 1;
& & & & & & & & & & & & & & ment = &付款&;
& & & & & & & & & & & & & & modelOrderOperRecord.OrderId = modelOrder.OrderId;
& & & & & & & & & & & & & & bllOrderOperRecord.Add(modelOrderOperRecord);
& & & & & & & & & & & & & & #endregion
& & & & & & & & & & & & & & DteShopMng.BLL.Basic.Client bllClient = new DteShopMng.BLL.Basic.Client();
& & & & & & & & & & & & & & var clientModel = bllClient.GetModel(modelOrder.ClientId);
& & & & & & & & & & & & & & //发送短信
& & & & & & & & & & & & & & mon.SendMsg.sendMessage(clientModel.Telphone, &您的订单:& + out_trade_no + &付款成功&);
& & & & & & & & & & & & }
& & & & & & & & & & }
& & & & & & & & }
& & & & & & & & Response.Write(wxModel.ToXml().ToString());
& & & & & & }
& & & & & & catch(Exception ex)
& & & & & & {
& & & & & & & & //异常日志输出
& & & & & & & & mon.TxtLog objLog = mon.TxtLog();
& & & & & & & & objLog.dir = System.Web.HttpContext.Current.Server.MapPath(&/log/dir/&);
& & & & & & & & objLog.WriteLog(ex.ToString());
& & & & & & }
三.查询订单接口代码:
& & & &/// &summary&
& & & & /// 查询订单
& & & & /// &/summary&
& & & & /// &param name=&out_trade_no&&客户端订单号&/param&
& & & & /// &param name=&transaction_id&&微信订单号&/param&
& & & & /// &returns&&/returns&
& & & & [HttpPost]
& & & & public JsonResult WxOrderQuery(string out_trade_no, string transaction_id)
& & & & & & try
& & & & & & {
& & & & & & & & WxPayData payModel = new WxPayData();//传入数据
& & & & & & & & WxPayData outPayModel = new WxPayData();//微信返回数据
& & & & & & & & WXOrderQuery orderModel = new WXOrderQuery();//return to APP
& & & & & & & & payModel.SetValue(&out_trade_no&, out_trade_no);
& & & & & & & & payModel.SetValue(&transaction_id&, transaction_id);
& & & & & & & & outPayModel = WxPayApi.OrderQuery(payModel);
& & & & & & & & //return outPayModel.ToXml();
& & & & & & & & if (outPayModel != null)
& & & & & & & & {
& & & & & & & & & & string ReturnCode = outPayModel.GetValue(&return_code&).ToString();//返回状态码 SUCCESS/FAIL
& & & & & & & & & & string ReturnMsg = outPayModel.GetValue(&return_msg&).ToString();//返回信息 OK/异常信息
& & & & & & & & & & string ResultCode = outPayModel.GetValue(&result_code&).ToString();//结果状态码 SUCCESS/FAIL
& & & & & & & & & & if (!ReturnMsg.Equals(&OK&))
& & & & & & & & & & {
& & & & & & & & & & & & rest.status = 201;
& & & & & & & & & & & & rest.message = ReturnM
& & & & & & & & & & }
& & & & & & & & & & else if (ReturnCode.Equals(&SUCCESS&) && ResultCode.Equals(&SUCCESS&))
& & & & & & & & & & {
& & & & & & & & & & & & orderModel.Attach = outPayModel.GetValue(&attach&).ToString();//附加信息 商品描述
& & & & & & & & & & & & orderModel.BankType = outPayModel.GetValue(&bank_type&).ToString();//付款银行
& & & & & & & & & & & & orderModel.TotalFee = ((decimal.Parse(outPayModel.GetValue(&total_fee&).ToString())) / 100).ToString();//订单总额
& & & & & & & & & & & & orderModel.TradeState = GetOrderState(outPayModel.GetValue(&trade_state&).ToString());//获取支付状态
& & & & & & & & & & & & DateTime dt = new DateTime();
& & & & & & & & & & & & if (DateTime.TryParseExact(outPayModel.GetValue(&time_end&).ToString(), &yyyyMMddHHmmss&, null, System.Globalization.DateTimeStyles.None, out dt))
& & & & & & & & & & & & {
& & & & & & & & & & & & & & orderModel.OverTime =
& & & & & & & & & & & & }
& & & & & & & & & & & & rest.status = 200;
& & & & & & & & & & & & rest.message = orderModel.TradeS
& & & & & & & & & & & & rest.data = orderM
& & & & & & & & & & }
& & & & & & & & & & else
& & & & & & & & & & {
& & & & & & & & & & & & string err_code_des = outPayModel.GetValue(&err_code_des&).ToString();
& & & & & & & & & & & & rest.status = 201;
& & & & & & & & & & & & rest.message = err_code_
& & & & & & & & & & }
& & & & & & & & }
& & & & & & & & else
& & & & & & & & {
& & & & & & & & & & rest.status = 201;
& & & & & & & & & & rest.message = &请求错误&;
& & & & & & & & }
& & & & & & & & return this.Json(rest, JsonRequestBehavior.AllowGet);
& & & & & & }
& & & & & & catch (Exception ex)
& & & & & & {
& & & & & & & & rest.status = 201;
& & & & & & & & rest.message =
ex.ToString();
& & & & & & & & return this.Json(rest, JsonRequestBehavior.AllowGet);
& & & & & & }
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:379次
排名:千里之外2098人阅读
微信支付虽然很坑,但是遇到的问题不是不可以解决的。
微信官网上对于支付返回-1是&&
我犯的错和他描述的都不一样。
1、新建一个微信支付demo的工程,将包名和签名上传给微信。并保证apk是通过keystore方式打了签名的,用官方的工具做签名。
2、将官方的demo示例参考一下,
权限部分:
&!-- WeixinPay --&
&uses-permission android:name=&android.permission.INTERNET& /&
&uses-permission android:name=&android.permission.MODIFY_AUDIO_SETTINGS&/&
&uses-permission android:name=&android.permission.WRITE_EXTERNAL_STORAGE&/&红色的地方要注意:
&span style=&color:#222222;&&&activity android:name=&.MainActivity&
&/span&&span style=&color:#ff0000;&&android:exported=&true&&/span&&span style=&color:#222222;&&&
&intent-filter&
&action android:name=&android.intent.action.MAIN& /&
&category android:name=&android.intent.category.LAUNCHER& /&
&/intent-filter&
&intent-filter&
&/span&&span style=&color:#ff0000;&&&action android:name=&android.intent.action.VIEW&/&
&category android:name=&android.intent.category.DEFAULT&/&
&data android:scheme=&wxd31ef1f4dd******&/&&/span&&span style=&color:#222222;&&
&/intent-filter&
&/activity&
&activity android:name=&.AlipayH5Activity&&&/activity&
&activity &/span&&span style=&color:#ff0000;&&android:name=&com.*******.paydemo.wxapi.WXPayEntryActivity&
android:exported=&true&
android:launchMode=&singleTop&&/span&&span style=&color:#222222;&&&
&/activity&&/span&Activity部分的逻辑代码:
IWXAPI api = WXAPIFactory.createWXAPI(MainActivity.this, null);//通过工厂创建对象
api.registerApp(ConstUtil.APP_ID);
PayReq request = new PayReq();
request.appId = ConstUtil.APP_ID;
request.partnerId = ConstUtil.PARTNER_ID;
request.prepayId = wxPrepayEntity.getPrepay_id();
request.nonceStr = wxPrepayEntity.getReq_noncestr();
request.timeStamp = wxPrepayEntity.getReq_timestamp();
request.packageValue = wxPrepayEntity.getReq_package();
request.sign = wxPrepayEntity.getReq_sign();
request.extData = &app data&; // optional
// 在支付之前,如果应用没有注册到微信,应该先调用IWXMsg.registerApp将应用注册到微信
api.sendReq(request);我遇到的情况是,把request.appId传给了request.partnerId,每一个参数都很关键的,如果签名和包名确定都没有问题,那么基本上是传递的参数有问题。最好跟做后台的同事一起看看就能解决问题。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:8474次
排名:千里之外
原创:19篇
(1)(1)(1)(1)(2)(2)(2)(1)(3)(1)(2)(1)(1)(1)(1)10:22 提问
微信支付 跨号支付 怎么解决啊
微信支付 跨号支付 怎么解决啊
我在一个非认证号 里面 打开 另外一个认证号开通微信支付的, 出现 跨号支付!,
!,不可能 每个 号都去认证下de
按赞数排序
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!
让他红包转给你不就行了
其他相似问题15911人阅读
java web(18)
Java(22)
1、请求的时候获取不到prepayid。
原因:setParameter(&total_fee&, &1&); //商品金额,以分为单位 &
total_fee里面的参数是否有小数点,或者测试的时候修改为了0.01;
需检查:total_fee传入的参数是否为整数;
2、请求支付跳转到微信支付时,商品描述为乱码:
原因:.setParameter(&input_charset&, &GBK&); //字符编码&
修改编码为UTF-8 ,
另外如果使用了微信支付的demo的方法,需将TenpayUtil中的getCharacterEncoding放回编码修改为utf-8
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:315969次
积分:2204
积分:2204
排名:第13569名
原创:65篇
评论:162条
(1)(3)(2)(6)(1)(1)(2)(5)(6)(6)(7)(4)(5)(1)(1)(2)(1)(1)(2)(1)(1)(1)(3)(2)(1)(1)(2)(2)(2)

我要回帖

更多关于 微信扫码支付限额 的文章

 

随机推荐