又拍云 php5月18号那,又拍云文档中心

移动流量

平台概述¶

又拍云手机流量营销平台,整合移动、电信、联通三大运营商流量资源,将强大的流量营销服务,通过接口等形式提供给商家合作伙伴,帮助商家开展品牌宣传、APP/游戏/微信公众号/网站的拉新与促活等多种营销活动。

通过接入又拍云流量营销平台,商家可以获得更多流量、用户和收益,而商家提供的活动也让用户获得了三网通用流量和更加丰富的活动体验。

产品特点¶

1.三网通用,成本优势,覆盖面广

2.快速对接、全流水、易对账、精结算

应用场景¶

1.APP 下载赠流量

2.微信公众号增粉

3.奖品礼券

4.流量加油站

5.积分兑换流量

6.活动比赛送流量

7.流量红包

8.员工福利

对接说明¶

1.请联系商务(Tel:0571-89775132)确定您的应用场景需求,获取对应流量报价

2.注册又拍云账号,如果您已有账号,请登录 又拍云控制台 完成企业/个人认证

3.前往导航 > 工具箱 > 手机流量营销页面,开通该服务(开通邮件中包含接口地址)

4.通过流量营销控制台配置回调地址

5.出口 IP 出于安全考虑暂不支持控制台配置,可联系我司商务完成生产环境联调

业务交互流程:

d73fdec6e1d7f42e822996680e967196.png

接口文档¶

又拍云手机流量平台接口入口地址统一为:https://ptp-api.upyun.com,请求接口时,统一使用 POST 方法, 文档类型统一为 Content-Type: application/json,使用 JSON 格式发送请求, 响应结果也会以 JSON 格式返回;文档中接口的请求地址只包含路径部分,实际请求时,需要加上统一入口地址 https://ptp-api.upyun.com。文档中描述签名计算时,都是先正序排序(给出的示例字符串已经是排序后的结果),再做 SHA1 运算。

本文档一共描述了四个接口和一个充值回调说明,接口如下:

获取签名 POST /refreshToken

提交订单 POST /chargeOrder

查询订单状态 POST /seekOrder

查询余额 POST /getMyBalance

针对以上接口,目前提供了 php 版本 sdk,用于提供接口调用示例, 各企业用户可以根据自己的需要进行封装,完善错误处理,下载地址:点击下载。

接口详情¶

1.获取计算签名需要的 token

接口说明

该接口用于获取 token,调用其他接口时,需要使用 token 计算签名。由于 token 需要在后续的接口请求中,全局共享,所以在并发请求的场景下,建议将 token 保存在 Redis/Mysql 等第三方存储中

请求地址

POST /refreshToken

请求参数

名称

类型

是否必须

描述

appkey

String

必须

appkey,由又拍云提供,可以登录手机流量后台查看

appsecret

String

必须

appsecret,由又拍云提供,可以登录手机流量后台查看

请求示例

curl https://ptp-api.upyun.com/refreshToken -H "Content-Type: application/json" -d "{\"appkey\": \"your_appkey_put_here\", \"appsecret\": \"your_appsecret_put_here\"}"

响应参数

名称

类型

示例值

描述

code

String

200

响应状态码,200 表示正常,其他详见错误码

token

String

XsdOpxqudzMnw

用于签名计算需要的 token,token 默认有效期为 24 小时,仅最后一次请求接口生成的 token 才有效

info

String

请求成功

响应示例

{

"code": "200",

"token": "XsdOpxqudzMnw",

"info": "请求成功"

}

2.创建订单

接口说明

创建手机流量充值订单

请求地址

POST /chargeOrder

请求参数

名称

类型

是否必须

描述

appkey

String

必须

E1KRHcKd3qoef8V1

mobile

String

必须

被充值手机号进行 AES 对称加密再 base64 转码后的值,一次只允许一个手机号码,见示例程序

prodcode

String

必须

流量包的产品编号

custno

String

必须

客户自定义的订单号,用于客户内部记录订单,长度必须小于30, 且每次充值,编号不重复

sign

String

必须

根据 token 和请求参数计算的签名,签名规则见算法说明部分 (示例程序下载)

prodtime

Integer

选填

流量时段,1 表示全时段流量,0 表示闲时流量,默认为全时段流量

prodstandard

Integer

选填

用于区分网络类型,可选值分别为:7表示全部网络类型,3表示 2g 和 3g 两种网络类型,1表示 2g 网络类型,默认值为7

响应参数

名称

类型

示例值

描述

code

String

200

响应状态码,200 表示创建订单成功;410 511 必须再次查询订单确认;其他错误码视为创建失败;系统响应超时等其他非正常响应,需要调用查询订单接口确认

custno

String

20150238829

客户订单号,和请求值一致

orderno

String

2016298237019

又拍云平台的订单号

info

String

充值成功

算法说明

计算手机号的 AES 对称加密,再 base64 转码后的值

将接口请求参数按照请求参数名称正序排序;

将请求参数和请求参数值拼接成字符串:appkey${YourAppKey}custno${YourCustno}mobile${YourAesEncodedMobile}prodcode${YourPrdcode}token${YourToken(将字符串中的变量${...}部分替换成实际值即可,)

对拼接后的字符串进行SHA1指纹运算,得到的 16 进制字符串 b5cd94c99e3e576f5e2ca0e66ee3da670cb1c62b 便是 sign 值

示例

参数拼接后的字符串为:appkey3P83lWwkoV15yZVTcustno20151123114702mobile8mBGFNfe1o/rzAx2Ost2IQ==prodcodeCMCC_10tokenVqHAab3JYXBDkCoO(注意手机号是 aes 加密再 base64 编码后的),进行 SHA1 运算得到的 sign 值为:8b05f52e605c7ab89a895eb730cacab4cbeabd4c

响应示例

{

"code": "200",

"custno": "20150238829",

"orderno": "2016298237019",

"info": "充值成功"

}

3.查询订单状态

接口说明

查询充值订单当前的状态,用于确认是否充值成功

请求地址

POST /seekOrder

请求参数

名称

类型

是否必须

描述

custno

String

必须

客户提交的订单号

appkey

String

必须

鉴权账号

sign

String

必须

签名,签名规则为:将 appkey${YourAppKey}custno${YourCustno}requesttime${YourReqestTime}TOKEN${YourToken} 中${...}变量部分替换为实际值,再进行 SHA1 运算。如果请求参数不包含 requesttime,计算签名则不需要该值

requesttime

String

查询的时间点,该参数为可选参数,格式为"YYYY-MM-DD HH:mm:ss",当传递该参数时,我们会在给定时间点的前后 1 个小时范围内查询;如果未传该参数,我们将在最近一周的订单中查询

响应参数

名称

类型

示例值

描述

code

String

200

响应状态码,200 表示充值成功;430 516 530 表示充值失败;511 必须人工再次确认;其他错误码视为充值中

custno

String

20150238829

客户自定义订单号

info

String

成功

响应示例

{

"code": "200",

"custno": "2015823871239",

"info": "充值成功"

}

4.查询余额

请求地址

POST /getMyBalance

请求参数

名称

类型

是否必须

描述

appkey

String

必须

sign

String

必须

签名,算法为 appkey${YourAppKey}TOKEN${Yourtoken} 中${...}变量部分替换实际值,再进行 SHA1 运算得到的字符串便为 sign 值

响应参数

名称

类型

示例值

描述

code

String

200

响应状态码

balance

Float

100.00

账户余额(包含冻结金额)

freeze

Float

20.00

冻结金额,正在交易的订单金额

availBalance

Float

80.00

实际可用余额(不包含冻结金额)

响应示例

{

"code": "200",

"balance": 100,

"freeze": 20,

"availBalance": 80

}

充值回调说明¶

客户需要在又拍云手机流量后台填写充值回调地址,并注意防火墙配置,不能屏蔽又拍云服务器地址。配置成功后,每次充值后,又拍云会向该地址发送 POST 请求,请求的数据格式为 application/json

请求参数

名称

类型

是否必须

描述

code

String

必须

响应状态码,200 表示充值成功;430,530 表示充值失败,其他错误码或异常信息表示充值中

orderno

String

必须

又拍云平台的订单号

custno

String

必须

客户自定义订单号

info

String

必须

描述信息

sign

String

必须

签名,客户可以使用该值校验请求是否合法,强烈建议接收充值回调时进行校验。签名规则为:将 code${Code}custno${YourCustno}info${Info}orderno${OrderNo}token${YourToken} 字符串中的变量部分${...}替换为请求参数中的值,再对得到的字符串进行 SHA1 签名

客户接受请求成功后,需要响应如下 json 值:

{

"info": "1"

}

否则,又拍云将隔 1 分钟再重试一次,一共回调 3 次

错误码说明¶

注:需要留意每个接口响应参数说明中的 code 处理方式

错误码

说明

错误码

说明

200

成功

201

充值中

410

运营商返回超时

422

用户状态异常

430

订购/充值失败

502

sign签名错误

503

余额不足

504

非法的回调地址

505

手机号不合法

506

用户不能订购该套餐

507

接口参数异常

508

令牌鉴权不通过

509

客户未认证授权

510

查询太频繁

511

内部异常,此时对订单的查询、充值等操作等需要联系客户再次确认

512

订单号重复

513

运营商请求超时

514

ip不在白名单

515

该客户不存在

516

不存在此订单

517

无法识别的手机号

519

当前appkey或appsecret错误

520

活动不存在

526

合同不在有效期

527

token不在有效期

530

订购/充值失败

531

签名不通过

532

订单号长度超过30

533

aes加密有误

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/394942.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL SERVER2000将多行查询结果拼接到一行数据及函数的创建

处理前的查询结果如上图: 通过借助SQL变量的定义 DECLARE Scope varchar(1000) DECLARE Num int SET Scope SET Num 1 SELECT ScopeScopeconvert(varchar(8),Num)、DescScope DescOper;, Num Num1 From fuel_contractQualityNew Where ContractID0120090001…

windows nginx c++读取请求数据_轻松应对百万并发的Nginx,搞懂LinuxC/C++这些技术栈升职加薪...

在深入了解 Nginx 各种原理及在极端场景下的一些错误场景处理时,需要首先理解什么是网络事件。Nginx 是一个事件驱动的框架,所谓事件主要指的是网络事件,Nginx 每个网络连接会对应两个网络事件,一个读事件一个写事件。在深入了解 …

如何成为一位牛逼的高手

郑昀 演讲稿 创建于2016/9/15 最后更新于2016/9/21 很多人都在思考一个问题: 怎样才能想出来一个牛逼的 idea? 有一位喜欢抽烟喝酒烫头的大师 给出了答案: 这事儿吧,简单,一共分两步。 第一步先让自己成为一个牛逼的人…

Python dict() 函数

Python dict() 函数 Python 内置函数 描述 dict() 函数用于创建一个字典。 语法 dict 语法: class dict(**kwarg) class dict(mapping, **kwarg) class dict(iterable, **kwarg) 参数说明: **kwargs -- 关键字mapping -- 元素的容器。iterable -- 可迭代…

贝塞尔曲线:原理、自定义贝塞尔曲线View、使用!!!

一、原理 转自:http://www.2cto.com/kf/201401/275838.html Android动画学习Demo(3) 沿着贝塞尔曲线移动的Property Animation Property Animation中最重要,最基础的一个类就是ValueAnimator了。Property Animation利用ValueAnimator来跟踪记录对象属性已…

python数据分析与基础实战_《python数据分析与挖掘实战》基础概念

数据建模.png 数据挖掘的基本任务:利用分类与预测、聚类分析、关联规则、时序模式、偏差检测、智能推荐等方法,帮助企业提取数据中蕴含的商业价值,提高企业竞争力。 数据探索:异常值分析、缺失值分析、相关分析和周期性分析。 数据预处理:数据…

简述JAVA线程调度的原理,Rxjava原理(二)--线程调度

1. 创建线程池和线程管理策略分析// 在开发中使用Rxjava来完成线程切换会调用到以下方法(还有几个就不一一列举了,原理一样的),那么就从这里开始分析Schedulers.io()Schedulers.computation()Schedulers.newThread()AndroidSchedulers.mainThread()当我们…

不同的模块中定义同样的宏为不同的值合法吗_如何创建自定义的建模规范

本文摘要:主要介绍如何创建自定义的建模规范检查,以及在建模规范检查中,如何增加自动修正模型使之符合规范。比如我们想创建一个自定义的规则,对于constant模块,1. 如果value是参数的话,则输出数据类型必须…

wsdl文件是怎么生成的_C++ 动态库.dll的生成---超级详细!!!

怎么将建好的工程生成.dll工程?1、在C中打开工程2、运行结果:输出Print修改开始:1、打开属性。2、修改以下内容:目标文件扩展名,由.exe--》.dll,直接删除修改即可配置类型,由.exe--》.dll,下拉菜单可选择最…

HTTP基本认证(Basic Authentication)的JAVA示例

大家在登录网站的时候,大部分时候是通过一个表单提交登录信息。但是有时候浏览器会弹出一个登录验证的对话框,如下图,这就是使用HTTP基本认证。下面来看看一看这个认证的工作过程:第一步: 客户端发送http request 给服务器,服务器验证该用户…

python能print中文吗_python怎么print汉字

今天就为大家分享一篇python中使用print输出中文的方法,具有很好的参考价值,希望对大家有所帮助。看Python简明教程,学习使用print打印字符串,试了下打印中文,不行。(推荐学习:Python视频教程&a…

oracle 11gogg,【OGG】Oracle GoldenGate 11g (二) GoldenGate 11g 单向同步配置 上

Oracle GoldenGate 11g (二)GoldenGate 11g 单向同步配置 上ItemSource SystemTarget SystemPlatformRHEL6.4 - 64bitRHEL6.4 - 64bitHostnamerhel64.oracle.comora11g.oracle.comDatabaseOracle 11.2.0.3Oracle 11.2.0.3Character SetAL32UTF8AL32UTF8ORACLE_SIDPRODEMREPList…

Centos7-卸载自带的jdk 安装jdk8

卸载JDK Centos7一般都会带有自己的openjdk,我们一般都回用oracle的jdk,所以要卸载 步骤一:查询系统是否以安装jdk #rpm -qa|grep java 或 #rpm -qa|grep jdk 或 #rpm -qa|grep gcj 步骤二:卸载已安装的jdk #rpm -e --nodeps java-1.8.0-openjdk…

iOS开发UIScrollView的底层实现

起始 做开发也有一段时间了,经历了第一次完成项目的激动,也经历了天天调用系统的API的枯燥,于是就有了探索底层实现的想法。 关于scrollView的思考 在iOS开发中我们会大量用到scrollView这个控件,我们使用的tableView/collectionv…

oracle查看登录时间黑屏,oracle 11g默认用户名、密码解锁 以及安装后重启黑屏问题.doc...

oracle 11g默认用户名、密码解锁 以及安装后重启黑屏问题.doc还剩3页未读,继续阅读下载文档到电脑,马上远离加班熬夜!亲,喜欢就下载吧,价低环保!内容要点:遇的同学,参考一下解决办法…

第六十二节,html分组元素

html分组元素 学习要点: 1.分组元素总汇 2.分组元素解析 本章主要探讨HTML5中分组元素的用法。所谓分组,就是用来组织相关内容的HTML5元素,清晰有效的进行归类。 一.分组元素总汇 为了页面的排版需要,HTML5提供了几种语…

WebSocket 实战--转

原文地址:http://www.ibm.com/developerworks/cn/java/j-lo-WebSocket/ WebSocket 前世今生 众所周知,Web 应用的交互过程通常是客户端通过浏览器发出一个请求,服务器端接收请求后进行处理并返回结果给客户端,客户端浏览器将信息呈…

mongodb 安装、启动

MongoDB 之 你得知道MongoDB是个什么鬼 MongoDB - 1 最近有太多的同学向我提起MongoDB,想要学习MongoDB,还不知道MongoDB到底是什么鬼,或者说,知道是数据库,知道是文件型数据库,但是不知道怎么来用 那么好,所谓千呼万唤始出来,现在我就拉给你们看: 一.初识MongoDB 之 什么东西都…

[转载]PSCAD调用MATLAB/SIMULINK之接口元件设计

原文地址:PSCAD调用MATLAB/SIMULINK之接口元件设计作者:luckyhappier1)接口元件 接口元件包括Graphics,Parameters和Script。注意:变量要与DSDYN要一致(PSCAD根据变量名区别变量)。 2)Circuit 定…

oracle数字类型ef映射,Entity Framework 学习中级篇5—使EF支持Oracle9i - ♂风车车.Net - 博客园...

从Code MSDN上下载下来的EFOracleProvider不支持Oracle9i.但是,目前我所使用的还是Oracle9i。为此,对EFOracleProvider修改了以下,以便使其支持Oracle9i.下面说说具体修改地方.(红色部分为添加或修改的代码部分)一,修改EFOracleProvider1,修改EFOraclePr…