分享你我的心得.
共乘一片美好网络.

asp微信支付的坑

用到的加密工具地址
http://tool.chinaz.com/Tools/md5.aspx
md5加密

https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=20_1
签名验证工具

https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_1
统一下单文档

https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_4
扫码接口文档模式一

https://pay.weixin.qq.com
商户平台登录地址

http://paysdk.weixin.qq.com/

微信demo地址

上面有个地址很关键

http://paysdk.weixin.qq.com/example/qrcode.php?data=

还有&notify_url值被转的坑先用tnotify_url替代再替换

asp替换如下

function notktm(stra)
stra=replace(stra,”tnotify_url”,”notify_url”)
notktm=stra
end function

还有就是asp的加密方式为php的md5加密,因为asp有两种以上md5加密

还有如下函数排序问题按ascii码字典顺序排序,手动就可以

ASCII码的值如下
48~57为0到9十个阿拉伯数字;
65~90为26个大写英文字母;
97~122号为26个小写英文字母。
所以应该写:
数字、大写英文字母、小写英文字母

还有白名单的问题,现已加入豪华套餐中,必须把所在的虚拟空间或是vps,ecs主机的IP加到里面否则也出错!

最后是post与get提交和json获取分割

Function GetBody(code)
Set https = Server.CreateObject(“Microsoft.XMLHTTP”)
With https
.Open “GET”, “https://api.weixin.qq.com/sns/oauth2/access_token”, False
.setRequestHeader “Content-Type”,”application/x-www-form-urlencoded”
.Send “appid=”&APPID&”&secret=”&APPSECRET&”&code=”&code&”&grant_type=authorization_code”
GetBody = .ResponseBody
End With
GetBody = BytesToBstr(GetBody,”utf-8″)
Set https = Nothing
End Function

Function BytesToBstr(body,Cset)
dim objstream
set objstream = Server.CreateObject(“adodb.stream”)
objstream.Type = 1
objstream.Mode =3
objstream.Open
objstream.Write body
objstream.Position = 0
objstream.Type = 2
objstream.Charset = Cset
BytesToBstr = objstream.ReadText
objstream.Close
set objstream = nothing
End Function

Dim sc4Json
Sub InitScriptControl
Set sc4Json = Server.CreateObject(“MSScriptControl.ScriptControl”)
sc4Json.Language = “JavaScript”
sc4Json.AddCode “var itemTemp=null;function getJSArray(arr, index){itemTemp=arr[index];}”
End Sub
Function getJSONObject(strJSON)
sc4Json.AddCode “var jsonObject = ” & strJSON
Set getJSONObject = sc4Json.CodeObject.jsonObject
End Function
Sub getJSArrayItem(objDest,objJSArray,index)
On Error Resume Next
sc4Json.Run “getJSArray”,objJSArray, index
Set objDest = sc4Json.CodeObject.itemTemp
If Err.number=0 Then Exit Sub
objDest = sc4Json.CodeObject.itemTemp
End Sub

Call InitScriptControl
Set objTest = getJSONObject(GetBody(code))

openid=objTest.openid
access_token=objTest.access_token

还有时间戳

asp代码如下

Function ToUnixTime(strTime, intTimeZone)
If IsEmpty(strTime) or Not IsDate(strTime) Then strTime = Now
If IsEmpty(intTimeZone) or Not isNumeric(intTimeZone) Then intTimeZone = 0
ToUnixTime = DateAdd(“h”,-intTimeZone,strTime)
ToUnixTime = DateDiff(“s”,”1970-1-1 0:0:0″, ToUnixTime)
End Function

用法times=ToUnixTime(now(),+8)

还有

随机字符串代码

Function getCode1(iCount1)
Dim arrChar1
Dim j1,k1,strCode1
arrChar1 = “23456789ABCDEFGHJKLMNPQRSTUVWXYZ”‘去掉了数字1和0,字母I和O
k1=Len(arrChar1)
Randomize
For i1=1 to iCount1
j1=Int(k1 * Rnd )+1
strCode1 = strCode1 & Mid(arrChar1,j1,1)
Next
getCode1 = strCode1
End Function

订单号代码

Randomize()
dingdanhao=INT((999999-1+1)*RND+1)

notify_url这个地址里是异步微信给咱程序的通知,所以把成功后的调用函数写这地址里

要不然,只有付款完毕后点完成才能启动函数,多数人忘记了呢?

最后是商户ID号一定要和微信里的商户ID号对应,我就遇见过一次这样的!

还有就是扫码支付,必须开通H5,和里面的网址配置都必须填写好,否则还是错误!腾讯弄的不在一起!都是坑,我都掉里过。

最后是编码问题gbk与utf-8都可以,gb2312不行

Response.Codepage=”936”
Response.Charset= “gbk”

Response.Codepage=”65001″
Response.Charset= “utf-8″

啥编码都没下面这句话好用

<meta http-equiv=”Content-Type” content=”text/html; charset=gbk” />

<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />

三个编码同时用也会是乱码

和微信接口对接的时候还有2个接口函数一样,但获取的时候不一样,用法也不一样,坑啊

获取access_token全局变量的函数和获取access_token再获取用户信息时的不一样

二者获取用户信息的区别在于获取关注字段subscribe

access_token全局变量一般都是静默不用用户允许获取用户openid和信息的

通过特殊网址让用户进去后点允许获取信息的是获取用户access_token变量

这有点乱自己慢慢体会

模版消息(业务通知)与一次性订阅消息是不一样的!后台很明确,都需要申请好像。一个是文字一个可以带图片

获取用户地理位置位置这个功能,没需求的就关闭,太烦人了!可以通过IP等获取用户位置,这个接口还麻烦呵呵!

最后说明一下!只有微信给别人发钱比如红包时和退款时才需要用到证书,否则不用证书。

php有现成的demo,比asp好写多了!而且坑还少点,写的代码也精炼,java与asp.net就没有php代码写的少。

就写这么多,留个文档让大家看看,我开始也是四处找代码,问别人,一点点的才写出来!

下面不是我的群,是asp微信开发的群

群号:3645974、群号:361633672

大师们都很慢,自己能解决的问题就自己解决吧!

 

 

赞(0)
未经允许不得转载:小叶白龙博客 » asp微信支付的坑
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!