1、配置文件
项目文件添加Config文件夹,文件中添加对应xml文件

<?xml version="1.0" encoding="utf-8" ?>
<Config>
<Partner>合作身份者ID,以2088开头由16位纯数字组成的字符串</Partner>
<Seller>收款支付宝账号(邮箱地址)</Seller>
<Key>交易安全检验码,由数字和字母组成的32位字符串</Key>
</Config>
<?xml version="1.0" encoding="utf-8" ?>
<Config>
<MerId>2222222222</MerId>
<Version>222222222</Version>
<Encoding>2222222222</Encoding>
<SignMethod>oeeeeq3iez</SignMethod>
<TxnType>eebq3iez</TxnType>
<TxnSubType>oeee3kstubbq3iez</TxnSubType>
<BizType>ood1jmeeeq3iez</BizType>
<ChannelType>ood1eeez</ChannelType>
<AccessType>ood1eeee3iez</AccessType>
<CurrencyCode>ood1jmcnez</CurrencyCode>
<SignCertpwd>ood1jmcnhjee</SignCertpwd>
<FrontTransUrl>ood1eetubbq3iez</FrontTransUrl>
<CertPath>ood1jmcnhjm2aeee3iez</CertPath>
</Config>
<?xml version="1.0" encoding="utf-8" ?>
<Config>
<AppId>wx09a1334d45f1</AppId>
<AppSecret>100000000000000000000000000</AppSecret>
<MchId>12312311</MchId>
<Key>kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk</Key>
</Config>
<?xml version="1.0" encoding="utf-8" ?>
<Config>
<AppId>wx09a1334d45f1</AppId>
<AppSecret>100000000000000000000000000</AppSecret>
<MchId>12312311</MchId>
<Key>kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk</Key>
</Config>

2、发起支付

protected void Page_Load(object sender, EventArgs e)
{
    ////////////////////////////////////////////请求参数////////////////////////////////////////////
    //必填,不能修改
    //服务器异步通知页面路径
    string notify_url = "http://商户网关地址/create_direct_pay_by_user-CSHARP-UTF-8/notify_url.aspx";
    //需http://格式的完整路径,不能加?id=123这类自定义参数
    //页面跳转同步通知页面路径
    string return_url = "http://商户网关地址/create_direct_pay_by_user-CSHARP-UTF-8/return_url.aspx";
    //需http://格式的完整路径,不能加?id=123这类自定义参数,不能写成http://localhost/
    //商户订单号
    string out_trade_no = DateTime.Now.ToString("xxxxxx00001");
    //商户网站订单系统中唯一订单号,必填
    //订单名称
    string subject = "订单名称";
    //必填
    //付款金额
    string total_fee = "0.01";
    //必填
    //订单描述
    string body = "订单描述";
    //商品展示地址
    string show_url = "http://www.bollshow.com";
    //需以http://开头的完整路径,例如:http://www.商户网址.com/myorder.html
    //支付宝防钓鱼时间戳
    //string anti_phishing_key = Genius.Payment.Alipay.Submit.Query_timestamp();
    //若要使用请调用类文件submit中的query_timestamp函数
    //客户端的IP地址
    string exter_invoke_ip = "221.0.0.1";
    //支付宝二维码支付
    string sHtmlText = Genius.Payment.Alipay.Utils.SendRequest(out_trade_no, subject, body, total_fee, notify_url, return_url, show_url);
    Response.Write(sHtmlText);
    //微信支付url
    string xx=Genius.Payment.WeiXinpay.QRUtils.SendRequest(out_trade_no,0.01m,"xxxxxxxxxx", notify_url, return_url);
    //银联支付
    Genius.Payment.UnionPay.Utils.SendRequest(out_trade_no, 0.01m, "xxxxxxxxxx", notify_url, return_url);
}

3、支付同步回调

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections.Specialized;
using System.Collections.Generic;

/*
 * / <summary>
 * / 功能:页面跳转同步通知页面
 * / 版本:3.3
 * / 日期:2012-07-10
 * / 说明:
 * / 以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。
 * / 该代码仅供学习和研究支付宝接口使用,只是提供一个参考。
 * /
 * / ///////////////////////页面功能说明///////////////////////
 * / 该页面可在本机电脑测试
 * / 可放入HTML等美化页面的代码、商户业务逻辑程序代码
 * / 该页面可以使用ASP.NET开发工具调试,也可以使用写文本函数LogResult进行调试
 * / </summary>
 */
public partial class return_url : System.Web.UI.Page
{
    protected void Page_Load( object sender, EventArgs e )
    {
        SortedDictionary<string, string> sPara = GetRequestGet();

        if ( sPara.Count > 0 )          /* 判断是否有带返回参数 */
        {
            Genius.Payment.Alipay.Notify    aliNotify    = new Genius.Payment.Alipay.Notify();
            bool                verifyResult    = aliNotify.Verify( sPara, Request.QueryString["notify_id"], Request.QueryString["sign"] );

            if ( verifyResult )     /* 验证成功 */
            {
/*
 * ///////////////////////////////////////////////////////////////////////////////////////////////////////////
 * 请在这里加上商户的业务逻辑程序代码
 */


/*
 * ——请根据您的业务逻辑来编写程序(以下代码仅作参考)——
 * 获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表
 */

/* 商户订单号 */

                string out_trade_no = Request.QueryString["out_trade_no"];

/* 支付宝交易号 */

                string trade_no = Request.QueryString["trade_no"];

/* 交易状态 */
                string trade_status = Request.QueryString["trade_status"];


                if ( Request.QueryString["trade_status"] == "TRADE_FINISHED" || Request.QueryString["trade_status"] == "TRADE_SUCCESS" )
                {
/*
 * 判断该笔订单是否在商户网站中已经做过处理
 * 如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
 * 如果有做过处理,不执行商户的业务程序
 */
                }else  {
                    Response.Write( "trade_status=" + Request.QueryString["trade_status"] );
                }

/* 打印页面 */
                Response.Write( "验证成功<br />" );

/* ——请根据您的业务逻辑来编写程序(以上代码仅作参考)—— */

/* /////////////////////////////////////////////////////////////////////////////////////////////////////////// */
            }else  { /* 验证失败 */
                Response.Write( "验证失败" );
            }
        }else  {
            Response.Write( "无返回参数" );
        }
    }


/*
 * / <summary>
 * / 获取支付宝GET过来通知消息,并以“参数名=参数值”的形式组成数组
 * / </summary>
 * / <returns>request回来的信息组成的数组</returns>
 */
    public SortedDictionary<string, string> GetRequestGet()
    {
        int                    i    = 0;
        SortedDictionary<string, string>    sArray    = new SortedDictionary<string, string>();
        NameValueCollection            coll;
/* Load Form variables into NameValueCollection variable. */
        coll = Request.QueryString;

/* Get names of all forms into a string array. */
        String[] requestItem = coll.AllKeys;

        for ( i = 0; i < requestItem.Length; i++ )
        {
            sArray.Add( requestItem[i], Request.QueryString[requestItem[i]] );
        }

        return(sArray);
    }
}

4、支付异步回调

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections.Specialized;
using System.Collections.Generic;


/*
 * / <summary>
 * / 功能:服务器异步通知页面
 * / 版本:3.3
 * / 日期:2012-07-10
 * / 说明:
 * / 以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。
 * / 该代码仅供学习和研究支付宝接口使用,只是提供一个参考。
 * /
 * / ///////////////////页面功能说明///////////////////
 * / 创建该页面文件时,请留心该页面文件中无任何HTML代码及空格。
 * / 该页面不能在本机电脑测试,请到服务器上做测试。请确保外部可以访问该页面。
 * / 该页面调试工具请使用写文本函数logResult。
 * / 如果没有收到该页面返回的 success 信息,支付宝会在24小时内按一定的时间策略重发通知
 * / </summary>
 */
public partial class notify_url : System.Web.UI.Page
{
    protected void Page_Load( object sender, EventArgs e )
    {
        SortedDictionary<string, string> sPara = GetRequestPost();

        if ( sPara.Count > 0 )          /* 判断是否有带返回参数 */
        {
            Genius.Payment.Alipay.Notify    aliNotify    = new Genius.Payment.Alipay.Notify();
            bool                verifyResult    = aliNotify.Verify( sPara, Request.Form["notify_id"], Request.Form["sign"] );

            if ( verifyResult )     /* 验证成功 */
            {
/*
 * ///////////////////////////////////////////////////////////////////////////////////////////////////////////
 * 请在这里加上商户的业务逻辑程序代码
 */


/*
 * ——请根据您的业务逻辑来编写程序(以下代码仅作参考)——
 * 获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表
 */

/* 商户订单号 */

                string out_trade_no = Request.Form["out_trade_no"];

/* 支付宝交易号 */

                string trade_no = Request.Form["trade_no"];

/* 交易状态 */
                string trade_status = Request.Form["trade_status"];


                if ( Request.Form["trade_status"] == "TRADE_FINISHED" )
                {
/*
 * 判断该笔订单是否在商户网站中已经做过处理
 * 如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
 * 如果有做过处理,不执行商户的业务程序
 * 注意:
 */
                    /* 退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知 */
                }else if ( Request.Form["trade_status"] == "TRADE_SUCCESS" )
                {
/*
 * 判断该笔订单是否在商户网站中已经做过处理
 * 如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
 * 如果有做过处理,不执行商户的业务程序
 */

/*
 * 注意:
 * 付款完成后,支付宝系统发送该交易状态通知
 */
                }else  {
                }

/* ——请根据您的业务逻辑来编写程序(以上代码仅作参考)—— */

                Response.Write( "success" ); /* 请不要修改或删除 */

/* /////////////////////////////////////////////////////////////////////////////////////////////////////////// */
            }else  { /* 验证失败 */
                Response.Write( "fail" );
            }
        }else  {
            Response.Write( "无通知参数" );
        }
    }


/*
 * / <summary>
 * / 获取支付宝POST过来通知消息,并以“参数名=参数值”的形式组成数组
 * / </summary>
 * / <returns>request回来的信息组成的数组</returns>
 */
    public SortedDictionary<string, string> GetRequestPost()
    {
        int                    i    = 0;
        SortedDictionary<string, string>    sArray    = new SortedDictionary<string, string>();
        NameValueCollection            coll;
/* Load Form variables into NameValueCollection variable. */
        coll = Request.Form;

/* Get names of all forms into a string array. */
        String[] requestItem = coll.AllKeys;

        for ( i = 0; i < requestItem.Length; i++ )
        {
            sArray.Add( requestItem[i], Request.Form[requestItem[i]] );
        }

        return(sArray);
    }
}
最后修改:2022 年 06 月 17 日 10 : 29 AM
如果觉得我的文章对你有用,请随意赞赏