您的位置:首页 > 其它

关于调用新浪支付接口

2011-12-30 13:37 169 查看
最近公司要做一个新浪支付接口的应用。

首先你得确认已成功申请到应用appkey 及appSecret。

要想调用新浪的支付接口还得申请一个支付key。这些都准备完毕了。接下来调用新浪官方的接口


接口一:get_token接口

用户发起支付时,应用开发者调用get_token接口,获取支付token,开放平台验证应用相关信息,验证成后,返回token值。

说明:应用开发者申请开通支付功能时,需要填写回调地址(参见回调接口);当用户付款成功后,开放平台调用“回调接口”通知开发者订单支付状态。

通过线上接口URL:http://api.t.sina.com.cn/pay/get_token.format

请求参数

参数名必填类型说明
order_idtruestring订单id,(为 了避免重复,需要以orderid_pre开 头(7位) 即为 支付ID, 总长 度必须为16位)
amounttrueint交易金额,单位:分 范围 1-- 500000分
desctruestring交易描述,最多50个 汉字 (URLEncode)
signtruestring签名值sign=md5(order_id|amount|desc|app_secret),’|’是竖线
sourcetruestring申请应用时分配的AppKey,调用 接口 时候 代表应用的唯一身份。(采用OAuth授 权方式不需要此参数)
如果是Oauth提交方式就无需再传递source参数了。通过这不可以成功获取到你的token及order_uid(sina_uid )

//支付成功
<result><token>***</token><order_uid>***</order_uid></result>



接口二:付款接口

成功获取token后,提交订单信息生成表单(表单参数)给开放平台。开放平台验证表单信息,验证通过则页面跳转至“付款页”,用户可进行付款操作;如果验证不通过,则返回报错信息。

说明:调用“付款接口”前,必须需先获取支付token(即:调用get_token接口)。

以POST表单提交方式将下面参数提交到 线上接口URL:http://pay.weibo.com/wb/?c=pay


表单参数

参数名必填类型及范围说明
return_urltruestring支付成功后,“返回应用”链接地址。须有开发者传递至平台。
order_idtrueint订单号,即获取token时传递的订单号,此订单号由开发者生成,可用于对账、客服支持等。
order_uidtruelong支付用户的SinaUID
desctruestring商品名称,必须是utf-8编码,并且要做urlEncode前端用于显示给用户看。
appkeytruelong申请应用时分配的AppKey,调用接口时候代表应用的唯一身份。
amounttrueint支付金额,单位分, 大于0小于500000
versiontruestring接口版本号(1.0)
tokentruestring通过调用get_token接口获取
这时成功的话就会返回到



失败直接跳到支付平台首页及(http://credits.weibo.com/)

public partial class SinaPay : PageBase
{
private const string keyDict = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{

try
{
int amount = Convert.ToInt32(Request["amount"]);

if (0 == amount)
{
return;
}

int extraCoin = 0;
switch (amount)
{
case 1000:
extraCoin = 3;
break;
case 5000:
extraCoin = 25;
break;
case 10000:
extraCoin = 70;
break;
case 30000:
extraCoin = 300;
break;
case 50000:
extraCoin = 750;
break;
default:
extraCoin = 0;
break;
}

if (string.IsNullOrEmpty(Utils.GetCookie("oauth_token")) || string.IsNullOrEmpty(Utils.GetCookie("oauth_token_secret")))
{
return;
}
var httpRequest = HttpRequestFactory.CreateHttpRequest(Method.POST);
httpRequest.Token = Utils.GetCookie("oauth_token").ToString();// Session["oauth_token"].ToString();
httpRequest.TokenSecret = Utils.GetCookie("oauth_token_secret").ToString();// Session["oauth_token_secret"].ToString()

var url = "http://api.t.sina.com.cn/pay/get_token.xml?";
string app_key = ConfigurationManager.AppSettings["app_key"];
string app_secret = ConfigurationManager.AppSettings["app_secret"];
string pay_key = ConfigurationManager.AppSettings["pay_key"];
string order_id = pay_key + GetOrderKey();

string desc = "涓€缃戞墦灏戒箣榄旀硶鎹曢奔鍏呭€?quot;;
string sign = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(order_id + "|" + amount + "|" + desc + "|" + app_secret, "md5");
string result = httpRequest.Request(url, "order_id=" + order_id + "&amount=" + amount + "&desc=" + HttpUtility.UrlEncode(desc) + "&sign=" + sign);

XDocument xDocument = XDocument.Parse(result);
XElement xRootElement = xDocument.Root;

if (null == xRootElement)
{
return;
}

string payToken = "";
if (null != xRootElement.Element("token"))
{
payToken = xRootElement.Element("token").Value;
}

string orderUserId = "";
if (null != xRootElement.Element("order_uid"))
{
orderUserId = xRootElement.Element("order_uid").Value;
}
//Session["sinaID"] = orderUserId;
string return_url = HttpUtility.UrlPathEncode("http://buyu.moweibo.com/SinaPayBack.html");
string version = "1.0";
string c = "c=pay";
Response.Write("鍏呭€艰烦杞腑...");
//========璁板綍鍏呭€?/span>
Model_User_Pay_Inst userPayInst = HandlerContext.PayHandler.GetUserPayByOrderId(order_id);
Model_User_Inst user = HandlerContext.UserHandler.GetUserByPlatform(Convert.ToInt64(orderUserId), 2);
if (null == userPayInst)
{
userPayInst = new Model_User_Pay_Inst();
userPayInst.UPOrderId = order_id;
userPayInst.PlatformId = user.PlatformId;
userPayInst.UPPayMoney = amount;
userPayInst.UPServerId = 0;
userPayInst.UPFishCoin = amount / 10 + extraCoin;
userPayInst.UPPayTime = DateTime.Now;
userPayInst.UPStatus = -1;
userPayInst.UserId = user.UserId;
userPayInst.UPPaySuccessTime=new DateTime(1900,1,1,0,0,1);
HandlerContext.PayHandler.AddUserPayInst(userPayInst);
}
PostData(return_url, c, order_id, orderUserId, desc, app_key, amount, version, payToken);
}
catch (System.Exception ex)
{
Log4netHelper.WriteLog(ex);
}
}
}

private string GetOrderKey()
{
try
{
string key = "";
Random random = new Random();
for (int i = 0; i < 9; i++)
{
int randNum = random.Next(0, keyDict.Length);
key = key + keyDict[randNum];
}
return key;
}
catch (System.Exception ex)
{

throw ex;
}
}

//鎺ュ彛2 浠樻鎺ュ彛
private void PostData(string StrOrder_url, string c, string orderId, string orderUserId, string desc, string appKey, int amount, string version, string token)
{
try
{
StringBuilder sb = new StringBuilder();
sb.Append("<form id=\"formData\" action=\"http://pay.weibo.com/wb/?c=pay\" method=\"post\">");
sb.Append("<input type= \"hidden\"  name=\"return_url\" value=\"" + StrOrder_url + "\">");
sb.Append("<input type= 'hidden'  name='order_id' value= '" + orderId + "'>");
sb.Append("<input type= 'hidden'  name='order_uid' value= '" + orderUserId + "'>");
sb.Append("<input type= 'hidden'  name='desc' value= '" + desc + "'>");
sb.Append("<input type= 'hidden'  name='appkey' value= '" + appKey + "'>");
sb.Append("<input type= 'hidden'  name='amount' value= '" + amount + "'>");
sb.Append("<input type= 'hidden'  name='version' value= '" + version + "'>");
sb.Append("<input type= 'hidden'  name='token' value= '" + token + "'>");
sb.Append("</form>");
sb.Append("<script language=\"javascript\">");
sb.Append("document.getElementById(\"formData\").submit();");
sb.Append("</script>");
Response.Write(sb.ToString());
Page.RegisterStartupScript("bankScript", sb.ToString());
}
catch (System.Exception ex)
{

throw ex;
}

回调接口

public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
try
{
string order_id = context.Request["order_id"];

if (null == context.Session[order_id])
{
context.Session[order_id] = DateTime.Now;
}
else
{
DateTime lastReqTime = (DateTime)context.Session[order_id];
TimeSpan ts = DateTime.Now - lastReqTime;
if (ts.TotalSeconds <= 2)
{
return;
}
}
string appkey = context.Request["appkey"];
//string app_key = ConfigurationManager.AppSettings["app_key"];
string app_secret = ConfigurationManager.AppSettings["app_secret"];
string sign = context.Request["sign"];
int amount = Convert.ToInt32(context.Request["amount"]);
long orderUid = Convert.ToInt64(context.Request["order_uid"]);

string tempSign =
// ReSharper disable PossibleNullReferenceException
System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(
order_id + "|" + appkey + "|" + orderUid + "|" + amount + "|" + app_secret, "md5").ToLower();
// ReSharper restore PossibleNullReferenceException

if (sign == tempSign)
{
Model_User_Pay_Inst userPayInst = HandlerContext.PayHandler.GetUserPayByOrderId(order_id);

if (userPayInst != null)
{
if (userPayInst.UPStatus == 1) return;
userPayInst.UPStatus = 1;
userPayInst.UPPaySuccessTime = DateTime.Now;
HandlerContext.PayHandler.UpdatePayInst(userPayInst);
//缁欑帺瀹跺姞涓婄浉搴旂殑楸煎竵
Model_User_Inst user = HandlerContext.UserHandler.GetUserByPlatform(Convert.ToInt64(orderUid), 2);
if (null != user)
{
user.FishCoin += userPayInst.UPFishCoin;
HandlerContext.UserHandler.UpdateUser(user);
Log4netHelper.WriteLog("order " + order_id + " is ok...");
context.Response.Write("OK");
}
}
}
}
catch (System.Exception ex)
{
Log4netHelper.WriteLog(ex.Message);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: