<% @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 & "" & _ "" & 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 %>