关于调用新浪支付接口

appstore苹果商店支付对接总结 公司最近把对接的appstore的任务(包括游戏登陆需要对接新浪微博登录和腾讯登录)分配给我。由于这三种对接(新浪微博登录、腾讯登录和appstore的支付),都是只有对应的API文档,没有对方的技术人员支持(大家懂的哈),造成在开发的过程的过程中遇到了各种先前想象不到的问题。幸运的是,功夫不负有心人,最终自己在自己的努力和同事的帮助下,终于完成了任务。现在把本人开发过程中的遇到的挫折写下来,作为 阅读详情

最近公司要做一个新浪支付接口的应用。

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

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

接口一:get_token接口

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

参数名 必填 类型 说明
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授 权方式不需要此参数)
如果是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_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);
            }
       

第三方支付接口 第三方支付接口 1.&nbsp; &nbsp;&nbsp; &nbsp; 快钱支付 2.&nbsp; &nbsp;&nbsp; &nbsp; 支付宝 3.&nbsp; &nbsp;&nbsp; &nbsp; YeePay易宝 4.&nbsp; &nbsp;&nbsp; &nbsp; 邮局支付(网汇通) 5.&nbsp; &nbsp;&nbsp; &am 阅读详情

相关推荐

新浪微博Android客户端案例源码解析与实战指南

本文还有配套的精品资源,点击获取 简介:weibo4android是一个基于Android平台开发的新浪微博客户端应用源码,适用于Android 2.2及以上版本。它被设计为帮助开发者进行教学、研究或二次开发,通过查看和发布微博实现社交功能。源码基于API级别8,即Android 2.2版本构建,需要开发者确保Android SDK与API级别兼容。该项目为开发者提供深入学...

weixin_42591413的博客 964

JavaWeb网站对接支付宝接口(商家版超详细!)

本文主要介绍如何将自己编写的JAVAWeb项目能使用支付宝付款,每个步骤超详细,不懂怎么弄的朋友可以看看(附有代码)

weixin_61908530的博客 3697

新浪、支付宝等第三方登录demo

实测好用,对初学php第三方登录的朋友,大有好处

新浪支付接口对接的总结

最近公司用户了新浪支付,账户托管,写的过程中发现有问题的话百度很少就记录下自己疑惑的地方 1.接口介入方式 这种接口介入的方式,各大平台都差不多的,支付宝啊,微信支付啊,融宝支付啊,银盈通啊。都是系统必要的参数,和接口需要的参数,拼一起然互加密。 新浪支付生成 sign 的方式,签名的方式可以是 RSA 的加密方式和 MD5 的加密的方式,不过新浪推荐的是MD5的加密方式,但是给的demo里

SailLiao 4774

新浪开放平台-签名工具

新浪开放平台-安卓签名工具,新浪分享创建应用填写签名时所需工具。

TBOX(Telematics Box)在智能网联汽车中的核心功能与应用场景解析

TBOX(Telematics Box)是智能网联汽车的“中枢神经”,基于Android或Linux操作系统,并通过CAN总线与车辆深度交互。它实现了远程控制、车辆状态监控、OTA升级及紧急呼叫(E-CALL)等核心功能,是提升用车安全、便利性与实现车辆持续进化的关键技术组件。

weixin_29158413的博客 804

ThinkPHP框架github导航

开发十年,就只剩下这套Java开发体系了 &gt;&gt;&gt;    ...

qmister 413

数据库和BI工程师面试题

 一.数据库 1.Oracle数据库,视图与表的区别?普通视图与物化视图的区别?物化视图的作用? 2.Oracle数据库,有哪几类索引,分别有什么特点? 3.Union与Union All的区别? 4.对游标的理解?游标的分类?使用方法? 5.如何查找和删除表中的重复数据?给出方法或SQL。 6.不借助第三方工具,怎么查看SQL的执行计划? 7.创建索引有哪些需要注意的要点?

web_go_run的专栏 1万+

php支付回调怎么写_php版新浪支付接口之回调接口笔记

新浪支付接口开发与支付宝的差不多先是按官方的要求提交数据然后再把支付成功的信息反馈过来给用户,这样就实现了支付及成功的提示了。所谓的新浪回调接口,就是当资金充值成功之后,新浪会通知本网站一个信息来告知已经充值成功,并返回一组成功的数组,我们根据这些数据再进行一个本地数据库的同步操作,比如更新本地数据库是否充值成功的状态,由未支付改为已支付,然后再网站上面进行显示,还有资金也会进行同步 update...

weixin_28873283的博客 545

systrace分析 之 问题初步定位

如下surfaceflinger空缺点,上面对应的bufferTX 中有buffer,但VSYNC-SF 过来后,SurfaceFlinger却没有去取,检查测试app “android.settings”, 也没有GPU completion 时间长的问题,所以该部分可以请SurfaceFlinger的owner 进一步确认为何不取buffer。. GPU拿的是acquireFence HWC拿的是releaseFence, GPU是绘图,HWC是合成显示,这两个是互相等待的关系,

yangzex的专栏 3196

HT7036计量芯片SPI通信与数据读取实战解析

本文详细解析HT7036计量芯片的SPI通信与数据读取实战,涵盖SPI时序配置、命令发送、数据读取及常见问题排查。重点介绍如何通过SPI接口与MCU通信,实现电能数据的稳定采集与处理,为智能电表等应用提供实用解决方案。

vscode5coder的博客 265

新浪与腾讯的开放平台对比

做了金庸问答分别在腾讯和新浪的开放平台上线,了解了一些WEB开发的皮毛,对腾讯和新浪两个开放平台也有了一些认识,下面就我能力范围内对两个平台进行一番比对。      首先说云服务的平台,注意,说的不是开放平台。新浪的云是SAE(Sina App Engine),而腾讯没有对外正式的云平台,只有开发hosting应用的时候才可以使用腾讯的云平台。个人觉得新浪在云技术上走得更早,技术也更成熟,也更

ace_5201314的专栏 2685

deepin启动异常处理

修复的命令在执行时会输出大量的修复信息,正常情况下修复完之后输入exit命令回车后,即可正常启动系统。

whxxiang的博客 4370

腾讯QQ、新浪微博第三方登录接口申请说明

这一段时间,公司一直要求在网站上加入第三方登录功能。昨天刚刚把接口申请的事项写成文档提交上去。今天趁热打铁,整理一下。并分享给大家。 腾讯QQ第三方登录接口 开发者注册 1.         在QQ互联开放平台首页 http://connect.qq.com/ ,点击右上角的“登录”按钮,使用QQ账号登录,如下图所示:   2.    登录成功后会跳转

总有些事,值得你去努力 1万+

使用R语言绘制Logistic回归模型的亚组分析森林图

亚组分析是一种常用的统计方法,用于探索不同亚组之间的差异,并确定是否存在某些变量对结果的调节作用。在本文中,我们将使用R语言来绘制Logistic回归模型的亚组分析森林图。在该图中,每个亚组都用一个点表示,点的位置表示亚组的均值,而线段表示亚组的置信区间。垂直参考线用于表示效应值为0的点,帮助我们判断亚组之间的差异。希望本文对你有所帮助,让你能够使用R语言绘制Logistic回归模型的亚组分析森林图。是一个二分类的变量,我们希望在亚组分析中探索它与响应变量之间的关系。函数来计算每个亚组的均值,并使用。

PixelNinja的博客 2003

【深度学习新浪潮】Nano Banana(Gemini 2.5 Flash Image)技术解析与开发者实操指南

重新定义了 AI 图像生成的产业标准。它不仅是“平民化的视觉工厂”,更是推动内容生产从“创意试错”转向“精准制造”的关键工具。未来,随着视频生成能力的加入(谷歌计划支持“文字指令 - 动态场景 - 多平台适配”全流程),Nano Banana 有望进一步颠覆影视、广告等领域的创作范式。:批量生成多场景图,模特姿态自然,服装褶皱和材质细节高度一致,节省 90% 拍摄成本。模型的非正式代号,是一款革命性的 AI 图像生成与编辑工具,主打。:生成细节丰富的厨师特写,光影自然,皮肤纹理和刀具反光逼真。

专注:太空算力、AI infra、异构调度、大模型成本工程 893

新浪微博应用开发者协议真坑爹啊!

注册新浪微博应用开发者时,你看过《应用开发者协议》吗?你知道有几条吗?知道里边的陷阱有什么吗?我相信没有几个人会那么无聊地去看那10339个字。但仔细读了《协议》后,你会发现,你就是“爹”,而协议里全是坑! 各位看官注意了: 2.8.4 因新浪微博开放平台运营的实际情况需求,新浪可能额外要求开发者增加或修改应用特性或参与运营活动,开发者有义务配合且新浪无需为此向开发者支付任何费用。 意思就是

flybywind的专栏 3258

AgentScope实战训练营:构建计划可视化管理和HITL的AI智能计划助手

本文基于AgentScope Java SDK和Spring Boot WebFlux,从零构建一个支持SSE流式对话、计划可视化管理和HITL的AI智能计划助手Web应用PlanNotebook。涵盖项目架构设计、ReActAgent初始化、自定义工具注册、Hook机制实现、SSE事件协议定义、前端流式渲染等核心技术点,提供完整可运行的代码示例和详细的REST API参考。

program哲学 399

用友盟社会化组件,分享到微信和新浪微博

最近做的APP,需要分享功能,于是试了一下友盟的社会化组件。总的感觉还不错,虽然没有比直接集成官方SDK简便多少,但是后台统计的功能不错,所以最后还是用了。官网的文档说明已经挺详细了,不过章节组织得有点乱,本文总结一下 获取友盟app key 首先去友盟注册一个app key,然后下载它的SDK。这里要注意的是,SDK分为IDFA版和非IDFA版,前者需要设置一个默认的广告页,否则有可能被苹果

kyfxbl 2167

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

ECSHOP整合第三方登录,QQ登录、新浪微博登录、支付宝登

ECSHOP整合QQ登录、新浪微博登录、支付宝登录等等,并带后台,希望大家喜欢和有用。 下面提供教程: 第一步:肯定是先下载插件了,文章最后面会提供下载地址的啦! 插件文件 第二步:插件解压后,将admin、includes和languages上传至网站根目录,images则上传至你正在需要的模板目录下,例如默认模板则是themes/default 第三步

程序员的梦想 1993

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

新浪API系列:支付API打造无缝支付体验,畅享便利生活(3)

作为开发者,要构建出安全、便捷的支付解决方案,新浪支付API是你不可或缺的利器。新浪支付API提供了全面而强大的接口和功能,帮助开发者轻松实现在线支付的集成和管理。通过这一API,你可以快速接入新浪支付平台,为用户提供多样化的支付方式,包括银行卡支付、扫码支付和移动支付等。新浪支付API的优势不仅仅在于支付方式的丰富,还在于其高效稳定的性能。立即获取新浪支付API,开启支付领域的创新之旅,为用户提供无缝支付体验,助力你的应用和平台取得巨大成功!服务提供支付宝以及对应的二维码支付、生活号支付、小程序支付。

Mtxxd的博客 897

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

新浪微博、腾讯微博、人人网授权连接

新浪微博、腾讯微博、人人网授权连接含一键发布PHP版         你是否有过这样的经历,每到一个网站都要求你注册一个账号,注册还有很多限制,比如用户名不能为数字特殊字符或汉字,密码要求是数字和字母的组合,长度也有限制。有时候注册的一个账号已经被别人注册了。久而久之注册的账号越来越多,密码也越来越多,导致我们自己都不记得注册的账号或密码是多少。这是一件非常痛苦的事情。而如今

paolei的笔记 3882
上一篇: 网页游戏中随机概率设计探讨
下一篇: 分页存储过程
MR丶CHAN
博客等级 码龄20年 31粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值