% @LANGUAGE="VBSCRIPT" CODEPAGE="65001" %>
<% Session.CodePage=65001 %>
<% Response.charset = "utf-8" %>
<%
Set rs = Server.CreateObject("ADODB.Recordset")
method=trim(Request("method"))
'支付商户信息
If wxAPPID="" Then
wx_Name = "民航医疗快线"
wxAPPID = "wx70f6a7346ee842c0" '公众号APPID
wxAPPSECRET = "2d6c59de85e876b7eadebeba62e5417a" '公众号APPSECRET
mch_id = "1573728151" '微信支付商户号 2月份开始转为1573728151
mch_key = "Xz0ClPK3f5sCeT6SGTaha1vpVmyUFcbp" '微信支付API密钥
End If
'签名验证----------
ApiSign=trim(Request("Sign"))
if ApiSign="" Then
errcode=40056
errmsg="invalid Sign"
else
'待签名字符串
ReDim arr(Request.QueryString.Count+Request.Form.Count,2)
Dim v '所有表单值
Dim t '所有表单数量
v=Request.QueryString
If v<>"" And Request.Form<>"" Then
v=v&"&"&Request.Form
ElseIf Request.Form<>"" Then
v=Request.Form
End If
t=Request.QueryString.Count+Request.Form.Count
For i=0 To t-1
arr(i,1)=Split(Split(v,"&")(i),"=")(0)
arr(i,2)=Split(Split(v,"&")(i),"=")(1)
Next
For i = 0 To t-1
For j = i + 1 To t-1
If arr(i,1) > arr(j,1) Then
tmp1 = arr(i,1)
arr(i,1) = arr(j,1)
arr(j,1) = tmp1
tmp2 = arr(i,2)
arr(i,2) = arr(j,2)
arr(j,2) = tmp2
End If
Next
Next
For i = 0 To t-1
'response.write arr(i,1) & "=" & arr(i,2) & "
"
If arr(i,1)="Sign" Then
reserve=arr(i,2)
else
If arr(i,2)="timestamp" Then arr(i,2)=Date() &" "& Time()
sParaSort=sParaSort & arr(i,1) & arr(i,2)
End if
Next
sign_type = "MD5"
input_charset="utf-8"
stringA=sParaSort&key
'response.write sParaSort & "
"
Private Function BuildRequestMysign(sParaSort)
'获得签名结果
Select Case sign_type
Case "MD5" BuildRequestMysign = Md5Sign(sParaSort,key,input_charset)
Case Else BuildRequestMysign = ""
End Select
End Function
sParaSort=BuildRequestMysign(sParaSort)
If CStr(ApiSign)<>CStr(sParaSort) Then
errcode=40057
errmsg="invalid Sign"
'签名调试
errmsg="invalid stringA:"&stringA&",Sign:"&sParaSort
End If
End If
'签名验证---end
If errcode="" Then
select case method
case "OrderQuery" '查询订单
transaction_id = request("transaction_id") '微信订单号
out_trade_no = request("out_trade_no") '商户订单号
If transaction_id="" And out_trade_no="" Then
result=2
errcode=40010
errmsg="invalid OrderID"
Else
'查询方式
If transaction_id<>"" Then
OrderQueryType="transaction_id"
OrderQueryID=transaction_id
Else
OrderQueryType="out_trade_no"
OrderQueryID=out_trade_no
End If
'时间戳
time_stamp = DateDiff("s", "1970-1-1 00:00:00", Now())
'随机字符串
randomize timer
rdCode = Int((32767)*Rnd +1000)
nonce_str = MD5(rdCode,input_charset)
shortUrl = "https://api.mch.weixin.qq.com/pay/orderquery"
'签名
stringA = "appid="&wxAPPID &"&mch_id="&mch_id&"&nonce_str="&nonce_str&"&"&OrderQueryType&"="&OrderQueryID
stringSignTemp = stringA & "&key=" & mch_key
sign = UCase(MD5(stringSignTemp,input_charset))
'生成支付
orderStr = "" & _
"" & wxAPPID & "" & _
"" & mch_id & "" & _
"<"&OrderQueryType&">" & OrderQueryID & ""&OrderQueryType&">" & _
"" & nonce_str & "" & _
"" & sign & "" & _
""
ReturnStr = PostXML(shortUrl, orderStr)
Set objXml = Server.CreateObject("Microsoft.XMLDOM")
objXml.preserveWhiteSpace = true
objXml.async = false
'加载微信字符串
WeiXinStr = ReturnStr
objXml.loadXML(WeiXinStr)
Set xmlDoc = objXml.documentElement
NodesLength = xmlDoc.childNodes.length
For i= 0 to NodesLength-1
If "#text" <> xmlDoc.childNodes(i).nodeName Then
Execute(xmlDoc.childNodes(i).nodeName & "=""" & Replace(Replace(xmlDoc.childNodes(i).text, """", ""), "'", "") & """")
End If
Next
webJson="{""result"":1,""return_code"":"""&return_code&""",""return_msg"":"""&return_msg&""",""appid"":"""&wxAPPID&""",""mch_id"":"""&mch_id&""",""result_code"":"""&result_code&""",""out_trade_no"":"""&out_trade_no&""",""trade_state"":"""&trade_state&""",""trade_state_desc"":"""&trade_state_desc&"""}"
End If
'查询订单 end
case else '微信统一下单
ShopOrdID=request("order_no") '订单号
OpenID = Request("openid") '微信客户OPENID
Total_fee = Request("Total_fee") '支付金额
trade_type = Request("trade_type") '交易类型
spbill_create_ip = Request("spbill_create_ip") '用户端IP
attach = Request("attach") '附加数据
pay_mch_id = Request("mch_id") '商户号
result=0
If Total_fee="" Then Total_fee=0
If pay_mch_id<>"" Then mch_id=pay_mch_id
If spbill_create_ip="" Then spbill_create_ip=getip()
If ShopOrdID="" Then
result=2
errcode=40001
errmsg="invalid order_no"
ElseIf OpenID="" And trade_type="JSAPI" Then
result=2
errcode=40002
errmsg="invalid OpenID"
ElseIf trade_type<>"JSAPI" And trade_type<>"NATIVE" And trade_type<>"APP" And trade_type<>"MWEB" Then
result=2
errcode=40004
errmsg="invalid trade_type"
Else
'读取订单信息
If ShopOrdID<>"" And result=0 Then
sql="select *,StretcherMoney=isnull((select SUM(StretcherMoney) from DispatchOrd where DispatchOrdState>0 and ServiceOrdIDDt=ServiceOrdID),0) from ServiceOrder where ServiceOrdID="&ShopOrdID
rs.open sql,objConn,1,1
if rs.Eof Then
result=2
errcode=40004
errmsg="订单信息出错,请重新提交。"
Else
ServiceOrdID = rs("ServiceOrdID") '服务单号
ServiceOrdClass = rs("ServiceOrdClass") '单据类型
ServiceOrdTraTxnPrice = rs("ServiceOrdTraTxnPrice") '成交价
StretcherMoney = rs("StretcherMoney") '担架费
ServiceOrdTraPaidPrice = rs("ServiceOrdTraPaidPrice") '已支付金额
ServiceOrdTraPrePayment = rs("ServiceOrdTraPrePayment") '需预付款
Guest_Reward = rs("Guest_Reward") '打赏金额
ServiceOrdPoints = rs("ServiceOrdPoints") '订单积分
If ServiceOrdTraTxnPrice="" Then ServiceOrdTraTxnPrice=0
If StretcherMoney="" Then StretcherMoney=0
If ServiceOrdTraPaidPrice="" Then ServiceOrdTraPaidPrice=0
If ServiceOrdTraPrePayment="" Then ServiceOrdTraPrePayment=0
If ServiceOrdPoints="" Or isnull(ServiceOrdPoints) Then ServiceOrdPoints=0
If Guest_Reward="" Then Guest_Reward=0
ServiceOrdNo = ServiceOrdClass& year(rs("ServiceOrd_CC_Time"))&Right("0"&month(rs("ServiceOrd_CC_Time")),2)&Right("0"&day(rs("ServiceOrd_CC_Time")),2) & "-"&Right("00"&rs("ServiceOrdNo"),3)
If attach="打赏" And Total_fee>0 Then
body="打赏" '商品描述
ElseIf (ServiceOrdTraTxnPrice+StretcherMoney)<=ServiceOrdTraPaidPrice And Guest_Reward<>Total_fee Then
result=2
errcode=40005
errmsg="支付已完成,请不要重复提交。"&attach
Else
If Total_fee=0 Then Total_fee=(ServiceOrdTraTxnPrice+StretcherMoney)-ServiceOrdTraPaidPrice
OrdTotal_fee=(ServiceOrdTraTxnPrice+StretcherMoney)-ServiceOrdTraPaidPrice
body="医疗服务费用" '商品描述
End If
End If
'sql="Insert into TVDV.dbo.API_Json (method,Json,reserve) values ('微信支付','"&ShopOrdID&"需支付:"&Total_fee&"','读取订单信息"&result&"')"
'objConn.Execute sql
End If
'Total_fee=0.01
'ShopOrdID=00000001
If body="" Then body="医疗服务费用"
If Total_fee>0 And result=0 Then
session("Weixin_OrderID")=ShopOrdID
notify_url="https://api.966120.com.cn/weixin/NotifyUrl.asp" '异步通知回调地址
'spbill_create_ip=Request.ServerVariables("REMOTE_ADDR") '客户IP
total_fee=Total_fee*100 '支付金额
total_fee=CSng(Total_fee)
'sql="Insert into TVDV.dbo.API_Json (method,Json,reserve) values ('微信支付','"&total_fee&"','开始支付下单')"
'objConn.Execute sql
'Response.Write total_fee
'Response.end
fee_type="CNY" '货币类型 符合ISO 4217标准的三位字母代码,默认人民币:CNY
'时间戳
time_stamp = DateDiff("s", "1970-1-1 00:00:00", Now())
'随机字符串
randomize timer
rdCode = Int((32767)*Rnd +1000)
nonce_str = MD5(rdCode,input_charset)
shortUrl = "https://api.mch.weixin.qq.com/pay/unifiedorder"
If attach<>"" Then ShopOrdID=ShopOrdID&"|"&attach '组合数据包字符串
If OpenID<>"" And trade_type="JSAPI" Then
'生成公众号支付
trade_type="JSAPI"
out_trade_no=ServiceOrdNo&"-W"&MONTH(DATE())&DAY(DATE())&HOUR(TIME())&MINUTE(TIME())&SECOND(TIME()) '支付订单号
'签名
stringA = "appid="&wxAPPID &"&attach="&ShopOrdID&"&body="&body&"&fee_type="&fee_type&"&mch_id="&mch_id&"&nonce_str="&nonce_str&"¬ify_url="¬ify_url&"&openid="&openid&"&out_trade_no="&out_trade_no&"&spbill_create_ip="&spbill_create_ip&"&total_fee="&total_fee&"&trade_type=JSAPI"
stringSignTemp = stringA & "&key=" & mch_key
'sql="Insert into API_Json (method,Json,reserve) values ('微信支付','"&stringA&"','开始支付下单1')"
'objConn.Execute sql
sign = UCase(MD5(stringSignTemp,input_charset))
'生成支付
orderStr = "" & _
"" & wxAPPID & "" & _
""&body&"" & _
"" & mch_id & "" & _
"" & ShopOrdID & "" & _
"" & nonce_str & "" & _
""¬ify_url&""&_
""&openid&""&_
""&out_trade_no&""&_
""&spbill_create_ip&""&_
""&total_fee&""&_
""&fee_type&""&_
"JSAPI"&_
"" & sign & "" & _
""
'sql="Insert into API_Json (method,Json,reserve) values ('微信支付','"&orderStr&"','开始支付下单2')"
'objConn.Execute sql
'Response.Write orderStr
ReturnStr = PostXML(shortUrl, orderStr)
'Response.Write ReturnStr
Set objXml = Server.CreateObject("Microsoft.XMLDOM")
objXml.preserveWhiteSpace = true
objXml.async = false
'加载微信字符串
WeiXinStr = ReturnStr
objXml.loadXML(WeiXinStr)
Set xmlDoc = objXml.documentElement
NodesLength = xmlDoc.childNodes.length
For i= 0 to NodesLength-1
If "#text" <> xmlDoc.childNodes(i).nodeName Then
Execute(xmlDoc.childNodes(i).nodeName & "=""" & Replace(Replace(xmlDoc.childNodes(i).text, """", ""), "'", "") & """")
End If
Next
JSAPI_id=prepay_id
webJson="{""result"":1,""return_code"":"""&return_code&""",""return_msg"":"""&return_msg&""",""appid"":"""&wxAPPID&""",""mch_id"":"""&mch_id&""",""nonce_str"":"""&nonce_str&""",""sign"":"""&sign&""",""result_code"":"""&result_code&""",""prepay_id"":"""&prepay_id&""",""trade_type"":"""&trade_type&""",""mch_key"":"""&mch_key&""",""total_fee"":"""&total_fee&""",""out_trade_no"":"""&out_trade_no&"""}"
'sql="Insert into TVDV.dbo.API_Json (method,Json,reserve) values ('微信支付','"&webJson&"','下单完成')"
'objConn.Execute sql
ElseIf trade_type="NATIVE" Then
'生成二维码支付
trade_type="NATIVE"
out_trade_no=ServiceOrdNo&"-N"&MONTH(DATE())&DAY(DATE())&HOUR(TIME())&MINUTE(TIME())&SECOND(TIME()) '支付订单号
'签名
stringA = "appid="&wxAPPID &"&attach="&ShopOrdID&"&body="&body&"&fee_type="&fee_type&"&mch_id="&mch_id&"&nonce_str="&nonce_str&"¬ify_url="¬ify_url&"&out_trade_no="&out_trade_no&"&spbill_create_ip="&spbill_create_ip&"&total_fee="&total_fee&"&trade_type=NATIVE"
stringSignTemp = stringA & "&key=" & mch_key
sign = UCase(MD5(stringSignTemp,input_charset))
'生成支付
orderStr = "" & _
"" & wxAPPID & "" & _
""&body&"" & _
"" & mch_id & "" & _
"" & ShopOrdID & "" & _
"" & nonce_str & "" & _
""¬ify_url&""&_
""&out_trade_no&""&_
""&spbill_create_ip&""&_
""&total_fee&""&_
""&fee_type&""&_
"NATIVE"&_
"" & sign & "" & _
""
ReturnStr = PostXML(shortUrl, orderStr)
'Response.Write ReturnStr&"
"
'Response.end
Set objXml = Server.CreateObject("Microsoft.XMLDOM")
objXml.preserveWhiteSpace = true
objXml.async = false
'加载微信字符串
WeiXinStr = ReturnStr
objXml.loadXML(WeiXinStr)
Set xmlDoc = objXml.documentElement
NodesLength = xmlDoc.childNodes.length
For i= 0 to NodesLength-1
If "#text" <> xmlDoc.childNodes(i).nodeName Then
Execute(xmlDoc.childNodes(i).nodeName & "=""" & Replace(Replace(xmlDoc.childNodes(i).text, """", ""), "'", "") & """")
End If
Next
code_id=prepay_id
webJson="{""result"":1,""return_code"":"""&return_code&""",""return_msg"":"""&return_msg&""",""appid"":"""&wxAPPID&""",""mch_id"":"""&mch_id&""",""nonce_str"":"""&nonce_str&""",""sign"":"""&sign&""",""result_code"":"""&result_code&""",""prepay_id"":"""&prepay_id&""",""trade_type"":"""&trade_type&""",""mch_key"":"""&mch_key&""",""code_url"":"""&code_url&""",""total_fee"":"""&total_fee&""",""out_trade_no"":"""&out_trade_no&"""}"
ElseIf trade_type="APP" Then
'生成APP支付
trade_type="APP"
out_trade_no=ServiceOrdNo&"-A"&MONTH(DATE())&DAY(DATE())&HOUR(TIME())&MINUTE(TIME())&SECOND(TIME()) '支付订单号
'签名
stringA = "appid="&wxAPPID &"&attach="&ShopOrdID&"&body="&body&"&fee_type="&fee_type&"&mch_id="&mch_id&"&nonce_str="&nonce_str&"¬ify_url="¬ify_url&"&out_trade_no="&out_trade_no&"&spbill_create_ip="&spbill_create_ip&"&total_fee="&total_fee&"&trade_type=APP"
stringSignTemp = stringA & "&key=" & mch_key
sign = UCase(MD5(stringSignTemp,input_charset))
'生成支付
orderStr = "" & _
"" & wxAPPID & "" & _
""&body&"" & _
"" & mch_id & "" & _
"" & ShopOrdID & "" & _
"" & nonce_str & "" & _
""¬ify_url&""&_
""&out_trade_no&""&_
""&spbill_create_ip&""&_
""&total_fee&""&_
""&fee_type&""&_
"APP"&_
"" & sign & "" & _
""
ReturnStr = PostXML(shortUrl, orderStr)
Set objXml = Server.CreateObject("Microsoft.XMLDOM")
objXml.preserveWhiteSpace = true
objXml.async = false
'加载微信字符串
WeiXinStr = ReturnStr
objXml.loadXML(WeiXinStr)
Set xmlDoc = objXml.documentElement
NodesLength = xmlDoc.childNodes.length
For i= 0 to NodesLength-1
If "#text" <> xmlDoc.childNodes(i).nodeName Then
Execute(xmlDoc.childNodes(i).nodeName & "=""" & Replace(Replace(xmlDoc.childNodes(i).text, """", ""), "'", "") & """")
End If
Next
code_id=prepay_id
If return_code= "SUCCESS" And result_code= "SUCCESS" Then
result=1
Else
result=2
End If
'KEY APP加密
APPKey=Mid(mch_key,1,3)&"d"&Mid(mch_key,4)
webJson="{""result"":"&result&",""return_code"":"""&return_code&""",""return_msg"":"""&return_msg&""",""appid"":"""&wxAPPID&""",""mch_id"":"""&mch_id&""",""nonce_str"":"""&nonce_str&""",""sign"":"""&sign&""",""result_code"":"""&result_code&""",""prepay_id"":"""&prepay_id&""",""trade_type"":"""&trade_type&""",""mch_key"":"""&APPKey&"""}"
ElseIf trade_type="MWEB" Then
'生成H5支付支付
trade_type="MWEB"
fee_type="CNY"
out_trade_no=ServiceOrdNo&"-H"&MONTH(DATE())&DAY(DATE())&HOUR(TIME())&MINUTE(TIME())&SECOND(TIME()) '支付订单号
scene_info="{""h5_info"":{""type"":""wap"",""wap_url"":""http://966120.com.cn"",""wap_name"":""民航医疗快线""}}" '场景信息
'签名
stringA = "appid="&wxAPPID &"&attach="&ShopOrdID&"&body="&body&"&fee_type="&fee_type&"&mch_id="&mch_id&"&nonce_str="&nonce_str&"¬ify_url="¬ify_url&"&out_trade_no="&out_trade_no&"&scene_info="&scene_info&"&spbill_create_ip="&spbill_create_ip&"&total_fee="&total_fee&"&trade_type=MWEB"
stringSignTemp = stringA & "&key=" & mch_key
sign = UCase(MD5(stringSignTemp,input_charset))
'生成支付
orderStr = "" & _
"" & wxAPPID & "" & _
"" & ShopOrdID & "" & _
""&body&"" & _
"" & mch_id & "" & _
"" & nonce_str & "" & _
""¬ify_url&""&_
""&out_trade_no&""&_
""&spbill_create_ip&""&_
""&total_fee&""&_
""&fee_type&""&_
"MWEB"&_
""&scene_info&""&_
"" & sign & "" & _
""
'Response.Write orderStr
ReturnStr = PostXML(shortUrl, orderStr)
Set objXml = Server.CreateObject("Microsoft.XMLDOM")
objXml.preserveWhiteSpace = true
objXml.async = false
'加载微信字符串
WeiXinStr = ReturnStr
objXml.loadXML(WeiXinStr)
Set xmlDoc = objXml.documentElement
NodesLength = xmlDoc.childNodes.length
For i= 0 to NodesLength-1
If "#text" <> xmlDoc.childNodes(i).nodeName Then
Execute(xmlDoc.childNodes(i).nodeName & "=""" & Replace(Replace(xmlDoc.childNodes(i).text, """", ""), "'", "") & """")
'Response.Write xmlDoc.childNodes(i).nodeName & "=""" & Replace(Replace(xmlDoc.childNodes(i).text, """", ""), "'", "") & """"&"
"
End If
Next
code_id=prepay_id
webJson="{""result"":1,""return_code"":"""&return_code&""",""return_msg"":"""&return_msg&""",""appid"":"""&wxAPPID&""",""mch_id"":"""&mch_id&""",""nonce_str"":"""&nonce_str&""",""sign"":"""&sign&""",""result_code"":"""&result_code&""",""prepay_id"":"""&prepay_id&""",""trade_type"":"""&trade_type&""",""mch_key"":"""&mch_key&""",""mweb_url"":"""&mweb_url&""",""spbill_create_ip"":"""&spbill_create_ip&""",""total_fee"":"""&total_fee&""",""out_trade_no"":"""&out_trade_no&"""}"
'webJson=mweb_url
'Response.redirect mweb_url
Else
result=2
errcode=40007
errmsg="invalid trade_type"
End If
'Response.Write ReturnStr
'Response.Write prepay_id
'Response.end
End If
End If
'微信统一下单 end
end select
End If
If Left(errcode,1)="4" Then
webJson="{""result"":2,""errcode"":"&errcode&",""errmsg"":"""&errmsg&"""}"
End If
Response.Write webJson
%>