美文网首页
说说微信支付遇到的坑

说说微信支付遇到的坑

作者: 我是Mr小赵先生 | 来源:发表于2017-03-15 12:04 被阅读433次

最近公司上的app需要增加一个微信支付的功能。初看微信支付API开发文档还是很简单的,但是在简单的背后却隐藏这几个不小的坑。

公司要接入的是APP支付(微信支付有如下几种[图1]),所以这里只谈APP支付遇到的坑,其它支付估计也有类似的坑吧。

图1

微信给出的业务流程

APP支付业务流程

商户系统和微信支付系统主要交互说明:
步骤1:用户在商户APP中选择商品,提交订单,选择微信支付。
步骤2:商户后台收到用户支付单,调用微信支付统一下单接口。参见【统一下单API】。
步骤3:统一下单接口返回正常的prepay_id,再按签名规范重新生成签名后,将数据传输给APP。参与签名的字段名为appId,partnerId,prepayId,nonceStr,timeStamp,package。注意:package的值格式为Sign=WXPay
步骤4:商户APP调起微信支付。api参见本章节【app端开发步骤说明
步骤5:商户后台接收支付通知。api参见【支付结果通知API
步骤6:商户后台查询支付结果。,api参见【查询订单API


1、统一下单API遇到的坑
商户后台系统需要把一些关于支付的信息post到微信的统一下单接口,post信息是xml格式的,如下图2;一开始我直接通过拼接字符串的方式写的,结果就各种不成功,由于提交的xml里面有中文,所以需要在xml里指定utf-8的编码,如此就可以提交成功得到prepay_id了。

图2

2、APP支付业务流程步骤3:统一下单接口返回正常的prepay_id,再按签名规范重新生成签名后,将数据传输给APP。参与签名的字段名为appId,partnerId,prepayId,nonceStr,timeStamp,package。注意:package的值格式为Sign=WXPay遇到的坑。

由于需要签名,然后我就根据微信支付签名算法把步骤3中提到的字段加上key值进行签名了,结果android和ios端用接口返回的prepayId和签名掉起微信时总是报参数错误,以为是签名签的不对,最后发现签名的这些字段名必须全部小些才可以


附C#部分关键代码
1、签名算法

string strA="appid=wx111111111111&body=xxx付费&mch_id=141111111&nonce_str=37A749D808E46495A8DA1E5352D03CAE&notify_url=https://weixinpay.com/notify.ashx&out_trade_no=20170315113530201659&spbill_create_ip=127.0.0.1&total_fee=1&trade_type=APP&key=imkey121";
string sign=System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(strA, "MD5").ToUpper();

2、制作需要post到微信接口的xml数据

            XmlDataDocument doc = new XmlDataDocument();
            XmlNode node = doc.CreateXmlDeclaration("1.0", "utf-8", "");
            doc.AppendChild(node);

            XmlNode root = doc.CreateElement("xml");
            doc.AppendChild(root);
            CreateNode(doc, root, "appid", appid);
            CreateNode(doc, root, "mch_id", mch_id);
            CreateNode(doc, root, "nonce_str", nonce_str);
            CreateNode(doc, root, "sign", sign);
            CreateNode(doc, root, "body", body);
            CreateNode(doc, root, "out_trade_no", out_trade_no);
            CreateNode(doc, root, "total_fee", total_fee);
            CreateNode(doc, root, "spbill_create_ip", spbill_create_ip);
            CreateNode(doc, root, "notify_url", notify_url);
            CreateNode(doc, root, "trade_type", trade_type);

        //CreateNode方法
        private void CreateNode(XmlDocument xmlDoc, XmlNode parentNode, string name, string value)
        {
            XmlNode node = xmlDoc.CreateNode(XmlNodeType.Element, name, null);
            node.InnerText = value;
            parentNode.AppendChild(node);
        }

3、post方法调用微信接口

                //menuInfo=需要post的xml参数
                //postUrl 微信接口地址
                //returnValue  通过微信接口获取的返回值xml格式
                byte[] byteData = Encoding.UTF8.GetBytes(menuInfo);
                Uri uri = new Uri(postUrl);
                HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(uri);
                webReq.Method = "POST";
                webReq.ContentType = "application/x-www-form-urlencoded";
                webReq.ContentLength = byteData.Length;
                //定义Stream信息
                Stream stream = webReq.GetRequestStream();
                stream.Write(byteData, 0, byteData.Length);
                stream.Close();
                //获取返回信息
                HttpWebResponse response = (HttpWebResponse)webReq.GetResponse();
                StreamReader streamReader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
                returnValue = streamReader.ReadToEnd();
                //关闭信息
                streamReader.Close();
                response.Close();
                stream.Close();

相关文章

  • 说说微信支付遇到的坑

    最近公司上的app需要增加一个微信支付的功能。初看微信支付API开发文档还是很简单的,但是在简单的背后却隐藏这几个...

  • 微信支付相关问题解决网址

    ios微信支付开发遇到的问题 微信支付趟过的坑

  • xcode8 - 打包Framework

    最近工作中有需求就是把支付宝、微信等一系列支付SDK集成起来,封装一套自己的支付SDK。简单说说遇到的坑吧!!(各...

  • 微信支付遇到的坑

    自己容易埋下的坑 1、订单创建成功但支付失败,再次调用订单进行支付又能成功支付失败报缺少appid 这里的微信报...

  • [总结] 微信开发遇到的坑

    本文总结在微信开发过程中遇到的各种坑。 微信支付:chooseWXPay:fail, the permission...

  • 微信和支付宝支付封装

    第一次接支付会遇到各种问题,所以我把自己走过的坑总结了一下: 微信支付: ①:微信支付 商户在微信开放平台申请开发...

  • iOS集成支付宝/微信支付遇到的坑...

    最近在集成微信/支付宝支付,下面是集成的大体流程以及遇到的一些坑,特此记录.首先来谈下微信支付(因为集成支付宝支付...

  • 微信支付中遇到的坑

    php版本兼容问题 php7不再支持HTTP_RAW_POST_DATA,微信支付$GLOBALS[‘HTTP_R...

  • 微信支付JSAPI遇到的坑

    这里没使用微信的js-sdk,因为js-sdk要在前端wx.config中配置公众号信息,jsapi版相对也要简单...

  • uniapp微信支付遇到的坑

    首先需要去微信开放平台申请微信支付微信开放平台[https://open.weixin.qq.com/] unia...

网友评论

      本文标题:说说微信支付遇到的坑

      本文链接:https://www.haomeiwen.com/subject/moklnttx.html