Discuz.Forum/EPayments.cs

(开头部分) 10KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

using System;
using System.IO;
using System.Net;
using System.Text;

using Discuz.Common;
using Discuz.Config;
using System.Security.Cryptography;

namespace Discuz.Forum
{
    public class EPayments
    {
        /// <summary>
        /// 检查支付结果
        /// </summary>
        /// <returns></returns>
        public static bool CheckPayment(string notifyId)
        {
            GeneralConfigInfo configInfo = GeneralConfigs.GetConfig();

            string partnerid = configInfo.Alipaypartnerid != "" ? configInfo.Alipaypartnerid : "2088002872555901";//如果config中关于合作partnerid的设置为空,则使用comsenz提供的partnerid

            string aliPayNotifyUrl1 = "https://www.alipay.com/cooperate/gateway.do?service=notify_verify&";
            string aliPayNotifyUrl2 = "http://notify.alipay.com/trade/notify_query.do?";

            string responseText = GetHttp(string.Format("{0}partner={1}&notify_id={2}", aliPayNotifyUrl1, partnerid, notifyId));

            if (responseText != "true")//可能是由于上一个地址失效,则用第二条ATN线路再次验证
                responseText = GetHttp(string.Format("{0}partner={1}&notify_id={2}", aliPayNotifyUrl2, partnerid, notifyId));

            //获取支付宝ATN返回结果,true是正确的订单信息,false 是无效的
            if (responseText != "true")
                return false;

            //如果返回信息是get式的,则无需验证参数是否被篡改,因为notifyid只能被校验一次,支付宝校验之后即失效
            if (DNTRequest.IsGet())
                return true;


            //排序
            string[] sortedStr = System.Web.HttpContext.Current.Request.Form.AllKeys;
            //string[] sortedStr = System.Web.HttpContext.Current.Request.QueryString.AllKeys;  本机测试时需要从QueryString中获得回传参数

            //构造Post的数据串
            StringBuilder urlParam = new StringBuilder();

            if (configInfo.Usealipaycustompartnerid == 0)
            {
                string aliPayNotifyUrl = "http://pay.discuz.net/gateway/alipay.php?_type=alipay&_action=verify&_product=Discuz!NT&_version=" + Discuz.Common.Utils.GetAssemblyVersion();
                for (int i = 0; i < sortedStr.Length; i++)
                {
                    if (DNTRequest.GetString(sortedStr[i]) != "")
                    {
                        if (urlParam.ToString() == "")
                            urlParam.Append(sortedStr[i] + "=" + Utils.UrlEncode(DNTRequest.GetString(sortedStr[i])));
                        else
                            urlParam.Append("&" + sortedStr[i] + "=" + Utils.UrlEncode(DNTRequest.GetString(sortedStr[i])));
                    }
                }
后面还有 176 行代码,解锁后查看完整代码

24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明

AI 解读 AI

登录后可用,每次 10 算力,解读结果公开显示在下面。

还没有人解读过这个文件。