关于调用新浪支付接口
2011-12-30 13:37
169 查看
最近公司要做一个新浪支付接口的应用。
首先你得确认已成功申请到应用appkey 及appSecret。
要想调用新浪的支付接口还得申请一个支付key。这些都准备完毕了。接下来调用新浪官方的接口
用户发起支付时,应用开发者调用get_token接口,获取支付token,开放平台验证应用相关信息,验证成后,返回token值。
说明:应用开发者申请开通支付功能时,需要填写回调地址(参见回调接口);当用户付款成功后,开放平台调用“回调接口”通知开发者订单支付状态。
通过线上接口URL:http://api.t.sina.com.cn/pay/get_token.format
请求参数
如果是Oauth提交方式就无需再传递source参数了。通过这不可以成功获取到你的token及order_uid(sina_uid )
成功获取token后,提交订单信息生成表单(表单参数)给开放平台。开放平台验证表单信息,验证通过则页面跳转至“付款页”,用户可进行付款操作;如果验证不通过,则返回报错信息。
说明:调用“付款接口”前,必须需先获取支付token(即:调用get_token接口)。
以POST表单提交方式将下面参数提交到 线上接口URL:http://pay.weibo.com/wb/?c=pay
这时成功的话就会返回到
失败直接跳到支付平台首页及(http://credits.weibo.com/)
回调接口
首先你得确认已成功申请到应用appkey 及appSecret。
要想调用新浪的支付接口还得申请一个支付key。这些都准备完毕了。接下来调用新浪官方的接口
接口一:get_token接口
用户发起支付时,应用开发者调用get_token接口,获取支付token,开放平台验证应用相关信息,验证成后,返回token值。说明:应用开发者申请开通支付功能时,需要填写回调地址(参见回调接口);当用户付款成功后,开放平台调用“回调接口”通知开发者订单支付状态。
通过线上接口URL:http://api.t.sina.com.cn/pay/get_token.format
请求参数
参数名 | 必填 | 类型 | 说明 |
---|---|---|---|
order_id | true | string | 订单id,(为 了避免重复,需要以orderid_pre开 头(7位) 即为 支付ID, 总长 度必须为16位) |
amount | true | int | 交易金额,单位:分 范围 1-- 500000分 |
desc | true | string | 交易描述,最多50个 汉字 (URLEncode) |
sign | true | string | 签名值sign=md5(order_id|amount|desc|app_secret),’|’是竖线 |
source | true | string | 申请应用时分配的AppKey,调用 接口 时候 代表应用的唯一身份。(采用OAuth授 权方式不需要此参数) |
//支付成功 <result><token>***</token><order_uid>***</order_uid></result>
接口二:付款接口
成功获取token后,提交订单信息生成表单(表单参数)给开放平台。开放平台验证表单信息,验证通过则页面跳转至“付款页”,用户可进行付款操作;如果验证不通过,则返回报错信息。说明:调用“付款接口”前,必须需先获取支付token(即:调用get_token接口)。
以POST表单提交方式将下面参数提交到 线上接口URL:http://pay.weibo.com/wb/?c=pay
表单参数
参数名 | 必填 | 类型及范围 | 说明 |
---|---|---|---|
return_url | true | string | 支付成功后,“返回应用”链接地址。须有开发者传递至平台。 |
order_id | true | int | 订单号,即获取token时传递的订单号,此订单号由开发者生成,可用于对账、客服支持等。 |
order_uid | true | long | 支付用户的SinaUID |
desc | true | string | 商品名称,必须是utf-8编码,并且要做urlEncode前端用于显示给用户看。 |
appkey | true | long | 申请应用时分配的AppKey,调用接口时候代表应用的唯一身份。 |
amount | true | int | 支付金额,单位分, 大于0小于500000 |
version | true | string | 接口版本号(1.0) |
token | true | string | 通过调用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); }
相关文章推荐
- 关于支付接口的调用(感谢beecloud)
- 关于php-工行支付接口错误提示总结
- 微信支付接口,提示:调用支付jsapi缺少参数: $key0$
- Java后台调用第三方支付接口(易宝支付)
- 关于C#中调用接口error in deserializing body of reply message错误
- 游戏中调用SDK提供的支付接口 头文件的包含
- 微信接口出现“调用支付jsapi缺少参数appid”
- 【框架】调用支付宝接口支付
- 【求解释】关于第三方接口调用中安全的疑问
- .net调用支付宝的沙箱测试接口 完美调通(网页支付)
- 关于PHP创建接口及调用接口的简短例子(本地)
- 调用支付宝接口进行支付时,'错误代码为: TRADE_TOTALFEE_NOT_MATCH的错误
- 关于微信支付IWXAPIEventHandler接口中onresp不能调用的问题
- 新浪开放平台:解决获取access_token抛 21323 异常,以及接口调用
- 安卓APP集成支付宝,调用支付接口,直接退出程序了
- 关于 第三方接口支付的时候 采用post提交的方式,有两种 一种是通过 curl来进行,一种是通过js当页面加载完后跳转
- 关于Java中Scanner对象的hasNext()方法对实现Readable接口的对象中的read()方法调用的探讨
- VS2010关于调用ffmpeg接口出错
- 关于接口调用的日期格式化问题
- 关于 php 调用 其他语言写的Web Service SOAP 接口的参数传递问题