html52.com
我爱小程序-开发者交流社区

请大神帮我看看?JSAPI开发问题

你好,这里是我所有的加密,发送XML,post发送函数的代码,一直报签名错误,实在是不明白,我签名字符串在网页上的验证工具都是通过的。麻烦看看 谢谢!

谢谢!

    string stringA =

"appid=wxa399bf4e1c381af6&body=JSAPICS&device_info=WEB&mch_id=1548163301&nonce_str=463522714640538891";

  string stringSignTemp = stringA +

"&key=wzszyy1923lhqyq0625xxgck15231336";

string aa = EncryptWithMD5(stringSignTemp);

      string sa = "<xml>"

        + "<appid>wxa399bf4e1c381af6</appid>"

            + "<body>JSAPICS</body>"

            + "<mch_id>1548163301</mch_id>"

            + "<device_info>WEB</device_info>"

            + "<nonce_str>463522714640538891</nonce_str>"

            + "<notify_url>pay.guahao.com</notify_url>"

            +

"<openid>ox6DtjoDOqR4Lc_icAhcnrvCG-YQ</openid>"

            + "<out_trade_no>1415659990</out_trade_no>"

            + "<total_fee>1</total_fee>"

            + "<trade_type>JSAPI</trade_type>"

            + "<sign_type>MD5</sign_type>"

            + "<sign>DEB073245D4B821089CCFE3B3713745C</sign>"

            + "</xml>";

        string tt = Post(sa, "https://api.mch.weixin.qq.com/pay/unifiedorder",

false, 6);

   public static string Post(string xml, string url, bool isUseCert, int

timeout)

    {

        System.GC.Collect();//垃圾回收,回收没有正常关闭的http连接

        string result = "";//返回结果

        HttpWebRequest request = null;

        HttpWebResponse response = null;

        Stream reqStream = null;

        try

        {

            //设置最大连接数

            ServicePointManager.DefaultConnectionLimit = 200;

          //设置https验证方式

            //if (url.StartsWith("https",

StringComparison.OrdinalIgnoreCase))

            //{

            //    ServicePointManager.ServerCertificateValidationCallback

=

            //            new

RemoteCertificateValidationCallback(CheckValidationResult);

            //}    

/**************************************************************

            * 下面设置HttpWebRequest的相关属性

            *

************************************************************/

            request = (HttpWebRequest)WebRequest.Create(url);

            //request.UserAgent = USER_AGENT;

            request.Method = "POST";

            request.Timeout = timeout * 1000;

            //设置代理服务器

            //WebProxy proxy = new WebProxy();                        

 //定义一个网关对象

            //proxy.Address = new Uri(WxPayConfig.PROXY_URL);            

 //网关服务器端口:端口

            //request.Proxy = proxy;

            //设置POST的数据类型和长度

            request.ContentType = "text/xml";

            byte[] data = System.Text.Encoding.UTF8.GetBytes(xml);

            request.ContentLength = data.Length;

            //是否使用证书

            if (isUseCert)

            {

            }

            //往服务器写入数据

          reqStream = request.GetRequestStream();

            reqStream.Write(data, 0, data.Length);

            reqStream.Close();

            //获取服务端返回

            response = (HttpWebResponse)request.GetResponse();

            //获取服务端返回数据

            StreamReader sr = new

StreamReader(response.GetResponseStream(), Encoding.UTF8);

            result = sr.ReadToEnd().Trim();

          sr.Close();

        }

        catch (System.Threading.ThreadAbortException e)

        {

        }

        catch (WebException e)

        {

        }

      catch (Exception e)

        {

            //Log.Error("HttpService", e.ToString());

            //throw new WxPayException(e.ToString());

        }

        finally

        {

            //关闭连接和流

            if (response != null)

            {

                response.Close();

            }

            if (request != null)

            {

                request.Abort();

            }

        }


        return result;

    }

  public static string EncryptWithMD5(string source)

    {

           var md5 = MD5.Create();

            var bs = md5.ComputeHash(Encoding.UTF8.GetBytes(source));

            var sb = new StringBuilder();

            foreach (byte b in bs)

            {

                sb.Append(b.ToString("x2"));

            }

            //所有字符转为大写

          return sb.ToString().ToUpper();

    }

你好,这里是我所有的加密,发送XML,post发送函数的代码,一直报签名错误,实在是不明白,我签名字符串在网页上的验证工具都是通过的。

网友回复

Admin²⁰²⁰:

1、签名sign字段是动态变化的,根据随机字符串而动态生成的。

2、nonce_str参数也是要随机变化的。

3、认真,静下心阅读官方文档

【微信支付】JSAPI支付开发者文档

https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

真正的个人免签约支付接口

云免签H5支付