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);
}
}
555
555