支付API接口(支付宝支付接口&微信支付接口)
2015-05-19 11:34
686 查看
C#(文章随着实现而持续更新,各种产生都是个人遇到并且解决记录,有误地方请告示)
https://mapi.alipay.com/gateway.do?
签名失败(“ILLEGAL_SIGN”)
https://mapi.alipay.com/gateway.do?_input_charset=utf-8
抱歉,由于网络系统的原因,您暂时无法使用当前的服务,请稍候再使用。
到这里大概想到为什么需要用“Form方式”,然后针对这两点使用“Form方式”进行测试:(“Form方式”带不带参数都能正常发出包)
action=https://mapi.alipay.com/gateway.do?_input_charset=utf-8
结果:成功
action=https://mapi.alipay.com/gateway.do?
结果:签名失败
–Query String Parameters 为空
编码的时候,要使用网站使用的编码格式来加密,虽然知道加密方式为MD5但是不知道使用“UTF-8”格式编码(c#(system)默认GBK),因此在支付宝接口那里进行签名对比,就会一直不同,导致一直提示“签名失败”。
因为要带”?_input_charset=utf-8”,在使用Post写入流的方式下:
其他Document说明里也说了,URL后面要加上加上编码,所以因为要带”?_input_charset=utf-8”,而Post不能带,否则出现第一种提示,如果不带可以,但是没有签名失败。
而Form行,所以暂时只支持“Form方式”,不然获取不到。为什么会出现第一种,暂时没找到答案。
疑问 ——:
1. 使用默认MD5默认加密编码(GBK)不就行了么?
2. 用浏览器模拟Get方式(直接组装到URL里) – OK,但是使用c# WebClient/HttpWebRequest/……来GET,一样出现问题1
带着这两个问题,继续测试,结果让我否定上面几乎所有的“问”:
用Form成功之后会保存一个cookie(“ALIPAYJSESSIONID”),如果自己删了,就会出现问题1。
那么为什么浏览器可以,用后台不行,原来是c#默认没有给它写入的,需要创建CookieContainer类:
这样就有定义了CookieContainer对象并且写入Cookie,返回给网页,而浏览器返回的包,如果看过,会发现Set_Cookie这个字段,返回时写入(当然,不知道如何说明)。
如果Cookie有“ALIPAYJSESSIONID”,Post写入流还是其他方式都能正常运行,URL(https://mapi.alipay.com/gateway.do?_input_charset=utf-8)带参数本来就是没问题。
到这里为止,另外说下,我去Alipay问他们技术人员:“所有Alipay接口都只是接受:“Form方式””,所以我上面才那样说的……
微信支付:
注意:
MD5加密注意编码方式,默认使用GBK(“GB2312”),因此MD5加密时,需要指定编码(“UTF-8”,网站使用的编码格式(charset)),否则签名会一直出错。支付宝支付:
(担保交易)疑问:(结果在尾)
Alipay只支持(暂时?)Form方式,虽然Document写着”推荐使用Form方式”,而且Demo有其他方式(Post写入流)但是,使用起来,相同的参数,相同的签名,只有Form成功,而(参数正确)其他都会一直提示:https://mapi.alipay.com/gateway.do?
签名失败(“ILLEGAL_SIGN”)
https://mapi.alipay.com/gateway.do?_input_charset=utf-8
抱歉,由于网络系统的原因,您暂时无法使用当前的服务,请稍候再使用。
到这里大概想到为什么需要用“Form方式”,然后针对这两点使用“Form方式”进行测试:(“Form方式”带不带参数都能正常发出包)
action=https://mapi.alipay.com/gateway.do?_input_charset=utf-8
结果:成功
action=https://mapi.alipay.com/gateway.do?
结果:签名失败
–Query String Parameters 为空
编码的时候,要使用网站使用的编码格式来加密,虽然知道加密方式为MD5但是不知道使用“UTF-8”格式编码(c#(system)默认GBK),因此在支付宝接口那里进行签名对比,就会一直不同,导致一直提示“签名失败”。
因为要带”?_input_charset=utf-8”,在使用Post写入流的方式下:
#. 带参数:“抱歉,由于网络系统的原因,您暂时无法使用当前的服务,请稍候再使用。”, #. 不带参数:“ILLEGAL_SIGN ”(签名不正确),不知道加密的编码方式。
其他Document说明里也说了,URL后面要加上加上编码,所以因为要带”?_input_charset=utf-8”,而Post不能带,否则出现第一种提示,如果不带可以,但是没有签名失败。
而Form行,所以暂时只支持“Form方式”,不然获取不到。为什么会出现第一种,暂时没找到答案。
疑问 ——:
1. 使用默认MD5默认加密编码(GBK)不就行了么?
2. 用浏览器模拟Get方式(直接组装到URL里) – OK,但是使用c# WebClient/HttpWebRequest/……来GET,一样出现问题1
带着这两个问题,继续测试,结果让我否定上面几乎所有的“问”:
用Form成功之后会保存一个cookie(“ALIPAYJSESSIONID”),如果自己删了,就会出现问题1。
那么为什么浏览器可以,用后台不行,原来是c#默认没有给它写入的,需要创建CookieContainer类:
HttpWebRequest myReq = (HttpWebRequest)HttpWebRequest.Create(strUrl); myReq.Method = "post"; myReq.ContentType = "application/x-www-form-urlencoded"; myReq.CookieContainer = new CookieContainer();
这样就有定义了CookieContainer对象并且写入Cookie,返回给网页,而浏览器返回的包,如果看过,会发现Set_Cookie这个字段,返回时写入(当然,不知道如何说明)。
如果Cookie有“ALIPAYJSESSIONID”,Post写入流还是其他方式都能正常运行,URL(https://mapi.alipay.com/gateway.do?_input_charset=utf-8)带参数本来就是没问题。
到这里为止,另外说下,我去Alipay问他们技术人员:“所有Alipay接口都只是接受:“Form方式””,所以我上面才那样说的……
相关文章推荐
- Java使用微信支付-发起统一下单支付接口
- 自己开发一套微信支付接口,小程序支付,微信h5支付都能轻松搞定
- 获取微信支付接口错误信息,一些官方公众号支付demo中没有的错误提示
- 【微信支付】公众号、商户基础配置和流程(包括设置支付授权目录、测试支付目录和白名单、JS接口安全域名、授权回调域名等)
- 微信支付 V3.3.7 JSAPI网页内支付接口心得
- 【微信接入网联支付】网联统一支付接口之微信支付
- 微信支付接口开发之--微信扫码支付
- Dcloud中mui 微信支付和支付宝支付接口完美实现付款代码(PHP支付宝demo)
- Dcloud中mui 微信支付和支付宝支付接口完美实现付款代码(PHP支付宝demo)
- 微信支付 php之Android接口(调起支付)
- 微信JS支付代码 前端调用微信支付接口
- 微信支付(公众号支付APIJS、app支付)服务端统一下单接口java版
- 微信沙箱退款查询接口demo实例,微信公众号支付退款查询api,微信沙盒1004用例-公众号/APP/扫码支付退款查询——微信支付沙箱开发11
- 微信支付接口开发之---微信支付之JSSDK(公众号支付)步骤
- 开通社交立减金支付接口,微信免充值接口升级——微信支付沙箱开发2
- 第三方支付平台:微信支付接口
- 微信支付接口开发之--微信扫码支付
- 微信公众平台支付 该网站暂时无法访问 网络接口可能被某些软件修改 请重置接入点设置后重新加载该网页,微信支付各种坑
- C#微信支付统一下单 APP支付接口
- 微信h5支付统一下单接口,实现用户在h5页面使用微信支付——微信h5支付开发实例7