⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cl_clsonlinepay.asp

📁 正版创力4.1SQL商业版!!!ASP版。
💻 ASP
字号:
<%
'===================================================
' CreateLive CMS Version 4.0
'							Powered by Aspoo.CoM
'===================================================
' File: Cl_ClsOnlinePay.asp
' Date: 2007-1-11
' Mail: Info@aspoo.cn
' Q  Q: 3315263, 596197794
' Msn : support@aspoo.cn, Clw866@hotmail.com
' Web : http://www.aspoo.com, http://www.aspoo.net
' Bbs : http://bbs.aspoo.com, http://bbs.aspoo.net
' Copyright (C) 2005-2007 Aspoo.CoM All Rights Reserved.
'===================================================
Rem 在线支付接口类
Class ClsOnlinePay
	Private P_Md5Text		Rem 信息进行MD5加密后的字符串

	Public P_Mid			Rem 商户编号,在申请商户成功后即可获得
	Public P_OrderID		Rem 订单编号(指商城订单,不是支付订单)
	Public P_PayNum			Rem 支付编号
	Public P_PayAmount		Rem 支付金额,以元为单位,小数点后保留两位,如:13.05
	Public P_PayDate		Rem 支付日期,格式为"yyyymmdd",如20050102
	Public P_TransNum		Rem 云网支付网关提供的该笔订单的交易流水号,供日后查询、核对使用;
	Public P_Status			Rem 成功状态(网银为20,云网为Y)
	Public P_MoneyType		Rem 支付币种,0为人民币
	Public P_Remark1		Rem 备注1
	Public P_Remark2		Rem 备注2
	Public P_BankInfo		Rem 银行信息
	Public P_PayBank		Rem 支付银行
	Public P_UserID,P_UserName Rem 支付用户ID,用户名

	Public P_PayMsg			Rem 支付处理信息
	Public P_IsSucceed		Rem 支付是否成功 True,False

	Private Sub Class_Initialize()
		P_IsSucceed = False
	End Sub

	Private Sub class_terminate()
		CloseAllObj
	End Sub

	Public Sub Alipay()
		Dim Md5Str
		Dim alipayNotifyURL,Retrieval,ResponseText
		P_PayNum		= Trim(Request("out_trade_no"))
		P_PayDate		= Trim(Request("notify_time"))	'2
		P_TransNum		= Trim(Request("notify_id"))'2
		P_PayBank		= "不详"'Trim(request("v_pmode"))
		P_Status		= Trim(Request("trade_status"))
		P_BankInfo		= P_Status'Trim(Request("pay_info"))
		P_PayAmount		= Trim(Request("total_fee"))
		P_Md5Text		= Trim(Request("sign"))

		'ATN 校验地址 (两种方案可以选择使用https.http)如果你的服务器不支持https访问的话,可以使用http查询地址
		alipayNotifyURL	= "https://www.alipay.com/cooperate/gateway.do?service=notify_verify&"
		'alipayNotifyURL	= "http://notify.alipay.com/trade/notify_query.do?"
		alipayNotifyURL = alipayNotifyURL & "partner=" & Cl.Product_Setting(4) & "&notify_id=" & P_TransNum

		Set Retrieval = Server.CreateObject("Msxml2.ServerXMLHTTP.3.0")
		Retrieval.setOption 2, 13056
		Retrieval.open "GET", alipayNotifyURL, False, "", "" 
		Retrieval.send()
		ResponseTxt = Retrieval.ResponseText
		Set Retrieval = Nothing
		Rem 定义所需变量
		Dim varItem,MyStr,Count,i,j
		Dim Minmax,MinmaxSlot,Mark,Temp,Value

		'获得 支付宝get过来的通知消息
		For Each varItem in Request.QueryString 
			MyStr=varItem&"="&Request.QueryString(varItem)&"^"&MyStr
		Next 
		If MyStr<>"" Then 
			MyStr=Left(MyStr,Len(MyStr)-1)
		End If
		'对参数排序
		MyStr	= Split(MyStr, "^")
		Count	= ubound(MyStr)
		For i = Count To 0 Step -1
			Minmax		= MyStr(0)
			MinmaxSlot	= 0
			For j = 1 To i
				Mark = (MyStr(j) > Minmax)
				If Mark Then
					Minmax		= MyStr(j)
					MinmaxSlot	= j
				End If
			Next
			If MinmaxSlot <> i Then 
				Temp = MyStr(MinmaxSlot)
				MyStr(MinmaxSlot) = MyStr(i)
				MyStr(i) = Temp
			End If
		 Next
		'构造md5摘要字符串
		For j = 0 To Count Step 1
			Value = Split(MyStr( j ), "=")
			If Value(0)<>"sign" And Value(0)<>"sign_type" then
				If j=Count Then
					Md5Str= Md5Str & MyStr( j )
				Else 
					Md5Str= Md5Str & MyStr( j )&"&"
				End If 
			End If 
		Next
		Md5Str	= Md5Str & Cl.Product_Setting(5)
		Md5Str	= Trim(md5(Md5Str,32))
		
		If P_Md5Text <> Md5Str or ResponseTxt<>"true" Then
			P_PayMsg = "MD5校验错误!"
			Exit Sub
		End If

		'判断支付状态,(文档中有支付枚举表,可供参考)
		If P_Status <> "WAIT_SELLER_SEND_GOODS" Then
			P_PayMsg = "支付失败!"
			Exit Sub
		End If

		Rem 用户签收
		UserReceive

	End Sub

	Public Sub Tenpay()
		Dim Md5Str
		Dim cmdno
		cmdno			= Trim(Request("cmdno"))
		P_Mid			= Trim(Request("bargainor_id"))	'2
		P_PayNum		= Trim(Request("sp_billno"))
		P_PayDate		= Trim(Request("date"))	'2
		P_TransNum		= Trim(Request("transaction_id"))'2
		P_PayBank		= "不详"'Trim(request("v_pmode"))
		P_Status		= Trim(Request("pay_result"))
		P_BankInfo		= Trim(Request("pay_info"))
		P_PayAmount		= Trim(Request("total_fee"))
		P_MoneyType		= Trim(Request("fee_type"))
		P_Remark1		= Trim(Request("attach"))
		'P_Remark2		= Trim(request("c_memo2"))
		P_Md5Text		= Trim(Request("sign"))

		Md5Str	= "cmdno=" & cmdno & "&pay_result=" & P_Status &_ 
				"&date=" & P_PayDate & "&transaction_id=" & P_TransNum &_
				"&sp_billno=" & P_PayNum & "&total_fee=" & P_PayAmount &_
				"&fee_type=" & P_MoneyType & "&attach=" & P_Remark1 &_
				"&key=" &  Cl.Product_Setting(5)
		Md5Str	= Ucase(Trim(md5(Md5Str,32)))

		if P_Md5Text="" or P_PayAmount="" Then
			P_PayMsg = "MD5校验错误!"
			Exit Sub
		End if
		if P_Md5Text <> Md5Str Then
			P_PayMsg = "MD5校验错误!"
			Exit Sub
		End If
		If Trim(P_Mid) <> Trim(Cl.Product_Setting(4)) Then
			P_PayMsg = "商户信息错误!"
			Exit Sub
		End if
		Rem 判断成功状态是否为0
		if CInt(P_Status) <> 0 Then
			P_PayMsg = "支付失败!"
			Exit Sub
		End If
		P_PayAmount = P_PayAmount/100

		Rem 用户签收
		UserReceive
	End Sub

	Rem 云网在线支付
	Public Sub CnCard()
		Dim Md5Str
		P_Mid			= Trim(request("c_mid"))	'2
		P_PayNum		= Trim(request("c_order"))
		P_PayDate		= Trim(request("c_ymd"))	'2
		P_TransNum		= Trim(request("c_transnum"))	'2
		P_PayBank		= "不详"'Trim(request("v_pmode"))
		P_Status		= Trim(request("c_succmark"))
		P_BankInfo		= Trim(request("c_cause"))
		P_PayAmount		= Trim(request("c_orderamount"))
		P_MoneyType		= Trim(request("c_moneytype"))
		P_Remark1		= Trim(request("c_memo1"))
		P_Remark2		= Trim(request("c_memo2"))
		P_Md5Text		= Trim(request("c_signstr"))
		Rem 校验信息完整性
		if P_Mid="" or P_PayNum="" or P_PayAmount="" or P_PayDate="" or P_MoneyType="" or P_TransNum="" or P_Status="" or P_Md5Text="" then
			P_PayMsg = "支付信息错误!"
			Exit Sub
		end if
		Md5Str	= P_Mid & P_PayNum & P_PayAmount & P_PayDate & P_TransNum & P_Status & P_MoneyType & P_Remark1 & P_Remark2 & Cl.Product_Setting(5)
		Md5Str	= Trim(md5(Md5Str,32)) Rem 云网支付不用转为大写

		if P_Md5Text <> Md5Str Then
			P_PayMsg = "MD5校验错误!"
			Exit Sub
		End If
		If Trim(P_Mid) <> Trim(Cl.Product_Setting(4)) Then
			P_PayMsg = "商户信息错误!"
			Exit Sub
		End if
		Rem 判断成功状态是否为Y
		if P_Status <> "Y" Then
			P_PayMsg = "支付失败!"
			Exit Sub
		End If
		
		Rem 用户签收
		UserReceive

	End Sub

	Rem 网银在线支付
	Public Sub ChinaBank()
		Dim Md5Str
		P_PayNum		= Trim(request("v_oid"))
		P_PayBank		= Trim(request("v_pmode"))
		P_Status		= Trim(request("v_pstatus"))
		P_BankInfo		= Trim(request("v_pstring"))
		P_PayAmount		= Trim(request("v_amount"))
		P_MoneyType		= Trim(request("v_moneytype"))
		P_Remark1		= Trim(request("remark1"))
		P_Remark2		= Trim(request("remark2"))
		P_Md5Text		= Trim(request("v_md5str"))
		Md5Str	= P_PayNum & P_Status & P_PayAmount & P_MoneyType & Cl.Product_Setting(5)
		Md5Str	= Ucase(Trim(md5(Md5Str,32)))
		if P_Md5Text="" Or P_PayAmount="" Or Not IsNumeric(P_PayAmount) Or P_Status="" or Not IsNumeric(P_Status) Then
			P_PayMsg = "支付信息错误!"
			Exit Sub
		End if
		'对比md5,要转换为大写
		if P_Md5Text <> Md5Str Then
			P_PayMsg = "MD5校验错误!"
			Exit Sub
		End if
		Rem 判断成功状态是否为20
		if Cint(P_Status) <> 20 Then
			P_PayMsg = "支付失败!"
			Exit Sub
		End If

		Rem 用户签收
		UserReceive

	End Sub

	Rem 支付成功后,用户签收处理过程(各支付接口通用)
	Public Sub UserReceive()
		'On Error Resume Next
		Dim rsPay,Rs,SQL
		Dim sMoney,PaymentID
		Set rsPay = Server.CreateObject("Adodb.recordSet")
		SQL="Select Top 1 * From Cl_Payment where PaymentNum='"&P_PayNum&"'"
		OpenConn : rsPay.Open SQL,Conn,1,3
		if rsPay.Bof and rsPay.Eof Then
			rsPay.Close:Set rsPay=Nothing
			'response.write("error")
			P_PayMsg = "找不到您下的订单,所以系统无法自动完成支付操作,请联系官方处理!"
			'Response.Write("找不到您下的订单,所以系统无法自动完成支付操作,请联系官方处理!")
			Exit Sub
			Response.end
		End If
		P_IsSucceed = True
		P_UserID	= Clng(rsPay("UserID"))
		P_UserName	= Trim(rsPay("UserName"))
		P_OrderID	= Clng(rsPay("OrderID"))
		sMoney		= Int(rsPay("PayMoney"))
		PaymentID	= Clng(rsPay("PaymentID"))
		If rsPay("Status")=1 then
			rsPay.Close:Set rsPay=Nothing
			'response.write("ok")
			P_PayMsg = "支付已经完成!"
			'Response.Write("支付已经完成,您已经取货,请不要重复取货!")
			Exit Sub
			Response.end
		End If
		
		Set Rs=Server.CreateObject("Adodb.recordSet")
		if P_OrderID > 0 then	'订单ID大于0的处理
			SQL="Select OrderID,UserID,MoneyReceipt,PresentExp,Status From Cl_Order Where OrderID="&P_OrderID&" and Status<2"
			Rs.Open SQL,Conn,1,3
			if Not (Rs.Bof and Rs.Eof) then
				Rs(2) = Rs(2) + sMoney
				Rs(4) = 2
				Rs.Update
				if Rs(3)>0 then Cl.Execute_U("Update "&Db.UserTable&" Set TotalExp=TotalExp+"&Rs(3)&" where UserID="&Rs(1)&"")
				P_Remark1="订单ID("&P_OrderID&")支付完成,系统自动已赠送ID为("&Rs(1)&")的用户 "&Rs(3)&"积分。"
			else
				P_Remark1="系统找不到对应订单号,所以无法自动处理订单。"
			End if
			Rs.Close
		ElseIf P_UserID > 0 then '订单ID=0,用户ID大于0的处理
			SQL="Select "&Db.UserID&","&Db.UserName&","&Db.UserPoint&","&Db.UserMoney&" From "&Db.UserTable&" where UserID="&P_UserID&""
			OpenConn_U : Rs.Open SQL,Conn_U,1,3
			if Not (Rs.Bof and Rs.Eof) Then
				'Rs(Db.UserPoint)=Rs(Db.UserPoint) + sMoney
				Rs(Db.UserMoney)=Rs(Db.UserMoney) + sMoney
				Rs.Update
				P_Remark1="系统已自动在其对应账户("&Rs(Db.UserName)&")上添加"&Cl.Web_Setting(26)&":"&sMoney&""&Cl.Web_Setting(27)&"。"
			end if
			Rs.Close
		Else	'游客支付的处理
			P_Remark1="系统未作任何处理。"
		End if
		Set Rs=Nothing
		P_Remark1	= rsPay("Remark") & P_Remark1
		rsPay("TrueMoney")	= P_PayAmount
		rsPay("eBankInfo")	= "①" & P_BankInfo'"支付成功"
		rsPay("Status")		= 1
		rsPay("Remark")		= P_Remark1
		rsPay.Update
		rsPay.Close:Set rsPay=Nothing
		Cl.Execute("insert into Cl_BankrollItem (UserID,UserName,PayMoney,TrueMoney,PayType,CurrencyType,BankName,ItemType,OrderID,PaymentID,Remark,AddTime) " & _
		"values ("&P_UserID&",'"&P_UserName&"',"&sMoney&","&P_PayAmount&",3,0,'"&P_PayBank&"',0,"&P_OrderID&","&PaymentID&",'"&P_Remark1&"','"&now()&"')")
		'if Err then
		'	Response.Write "执行程序发现错误,为不耽误您的使用,请及时报告管理员给予解决!<BR>"
		'	Response.Write "错 误 号: " & Err.Number & "<BR>"
		'	Response.Write "错误描述:" & Err.Description & "<BR>"
		'	Response.Write "错误来源:" & Err.Source & "<BR>"
		'	Response.end
		'end if
	End Sub
End Class

Dim OnlinePay
Set OnlinePay = New ClsOnlinePay
%>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -