手机流量充值包充值软件哪个好?

快速翻页:
同类产品共有1条|更多产品>>
无限流量充值卡,无限流量软件50元包月流量无限用,电影游戏上网一手掌握。零售或招代理,价格好商量
该商品尚不支持在线交易,建议选购支持的商品。若您直接向卖家转账付款,可能存在资金风险。
公司名称:旺信信息技术(个体经营)
留下联系方式,专业采购团队帮你找货
采购数量:
手机号码:
采购说明:
剩余输入字数(500)
成功提交询价单,请等待供应商报价
类型:上网卡充值
适用:移动
适用地区:全国
充值方式:在线卡密
面值金额:包月
套餐类型:包月套餐
面值时长:充值之日起算
正在加载中........
慧聪网厂家旺信信息技术(个体经营)为您提供无限流量充值卡,无限流量软件50元包月流量无限用,电影游戏上网一手掌握。零售或招代理,价格好商量的详细产品价格、产品图片等产品介绍信息,您可以直接联系厂家获取无限流量充值卡,无限流量软件50元包月流量无限用,电影游戏上网一手掌握。零售或招代理,价格好商量的具体资料,联系时请说明是在慧聪网看到的。
同类商品推荐
我的浏览记录
无限流量充值卡,无限流量软件50元包月流量无限用,电影游戏上网一手掌握。零售或招代理,价格好商量相关资源
充值卡相关供应信息
您在慧聪网上采购商品属于商业贸易行为。以上所展示的信息由卖家自行提供,内容的真实性、准确性和合法性由发布卖家负责,请意识到互联网交易中的风险是客观存在的。推荐使用,保障您的交易安全!
热门商机最新商机
按字母分类 :
成功加入采购单!
当前采购单共3种货品
成功加入采购单!
当前采购单共3种货品
不能购买自己发布的产品!
选中货品中含失效货品,无法完成下单,可能是:
1.货品库存不足
2.货品已过期,或被卖家删除
3.货品不支持在线交易
卖家暂时不在线,留下联系方式,卖家会主动联系您
*我要采购:
我的姓名:
留言内容:售价2.85元
售价4.75元
选择支付方式
财付通支付【QQ钱包】手机用户无法在线付款,请联系客服。本文档适用于阅读者了解如何接入麦流量,以达到为用户手机号码进行流量充值的目的
流量分销平台开放接口文档是面向具有一定的网站开发能力,了解ASP、PHP、JAVA、ASP.NET等开发语言中的一种及SQL数据库语言的网站开发、维护和管理人员。
将充值请求的处理结果以JSON格式返回给商户
将交易的某一部分费用分给商户
向分销平台系统发起一次充值接口的调用
将充值请求的处理结果数据通过服务器主动通知的方式通知给商户网站
充值请求的明细数据
签约的分销平台账号对应的唯一用户号
用来参与数据AES加密的私钥
secret key
用来参与数字签名的私钥
用来校验充值请求的有效性
图2-1 商户系统请求/分销平台响应交互模式
构造请求数据
商户根据分销平台提供的接口规则,通过程序生成得到签名结果及要传输给分销平台的数据集合。
发送请求数据
把构造完成的数据集合,通过Http请求的方式传递给分销平台接口。
分销平台对请求数据进行处理
分销平台得到这些集合后,会先进行安全校验等验证,一系列验证通过后便会处理完成这次发送过来的数据请求。
返回处理的结果数据
对于处理完成的请求,分销平台会以两种方式把数据反馈给商户:
返回JSON格式的提示信息;
分销平台服务器主动发起通知,调用商户在请求时设定好的页面路径(notifyUrl);
对获取的返回结果数据进行处理
商户在服务器异步通知页面获取分销平台返回的结果数据后,可以结合自身系统的业务逻辑进行数据处理。
http://122.224.212.160:8980/recharge/order?d=587319CBAD8053762ECC63D735572ACA&t=0&s=FC1BE38A21CED2ADB596AD2FCF51B&token=IIZHNKU9Q8Q8QU7TRHU31XVKCZCNEAMF&a=100000
Header Set-Cookie
FMMarket=8cbca7a74b004dc6b86c646
ceb8e984cbcfa06bef4aa0bb34dd6a564bbeaf69fa6df75223c2cea6b4cbcdb3cf2ebd3c85cd6fafb8dcdea9ac0b92b1a1f0bb98ab9dff8cda18bf7f54dd21cdde2895c2ebd5aae5cb7dc4854bef9a682befa55eadce681a2e7ef90b8e401bbebebac246ea6c47671cecda2dbbafd3c5ee36ed598b283
请求参数是商户在与分销平台进行数据交互时,提供给分销平台的验证数据,以便分销平台根据这些数据进行数据安全校验的处理。
类型(长度范围)
是否可为空
用于校验请求是否有效
请参见“Token获取说明”
合作者身份ID
签约的分销平台账号对应的唯一用户号(一般由200开头)
请参见“摘要机制”
发起请求的时间(毫秒)
请参见“签名机制”
http://122.224.212.160:8980/recharge/order?d=587319CBAD8053762ECC63D735572ACA&t=0&s=FC1BE38A21CED2ADB596AD2FCF51B&token=IIZHNKU9Q8Q8QU7TRHU31XVKCZCNEAMF&a=100000
通过获取token接口得到一个由分销平台分配的SessionID,并将SessionID设置到充值接口的请求Header-Cookie中,以便于分销平台在请求处理过程中区别商户的唯一性。
请参见“Token获取说明”
数据集是商户在与分销平台进行数据交互时,提供给分销平台的请求数据,以便分销平台根据这些数据进一步处理。这些数据是封装在HTTP请求体中。
类型(长度范围)
是否可为空
合作者身份ID
签约的分销平台账号对应的唯一用户号(一般由200开头)
channelOrderId
商户订单号
商户定义的订单号
createTime
订单创建时间
订单创建时间
单位为KB,如1M=1024KB
可充值范围
流量包可充值范围。全国:0、省内:1
充值的手机号码
分销平台回调地址
商户接收分销平台回调的HTTP接口地址
数据集注意事项
数据集必须以JSON的格式进行封装,然后进行AES对称加密(请参见数据加密)。最后设置在HTTP请求体中发送到分销平台;
数据集编码格式必须为UTF-8;
待加密的JSON格式数据集
"cpUser": "100000",
"channelOrderId": "7",
--您的订单号
"content": "这是一个测试充值流量的例子",
--订单描述
"createTime": "04",
--订单时间
"type": 1,
--充值类型,固定为1
"amount": 5120,
--充值额度,单位kb
"mobile": "170****2013",
--充值的手机号码
"notifyUrl": http://fm-/callback
--回调地址
加密后的数据
ceb8e984cbcfa06bef4aa0bb34dd6a564bbeaf69fa6df75223c2cea6b4cbcdb3cf2ebd3c85cd6fafb8dcdea9ac0b92b1a1f0bb98ab9dff8cda18bf7f54dd21cdde2895c2ebd5aae5cb7dc4854bef9a682befa55eadce681a2e7ef90b8e401bbebebac246ea6c47671cecda2dbbafd3c5ee36ed598b283
分销平台对商户的请求数据处理完成后,会同步将充值请求提交结果响应给商户。
类型(长度范围)
是否可为空
statusCode
接口请求响应码
分销平台接收充值请求的接口响应码。指系统/接口级别的响应。如:安全校验不通过、服务繁忙、请求拒绝等
data.orderId
分销平台处理本次请求生成的订单号
data.channelOrderId
商户订单号
商户定义的订单号
data.status
分销平台接收充值请求的业务的提交结果。如:非法订单号、手机号不支持、无指定的流量包等
data.failReason
提交失败描述
提交失败原因
响应数据注意事项
返回的数据格式采用的是JSON
返回的数据编码是UTF-8
"statusCode": 200,
--请求响应码
"message": "",
--请求失败原因
"orderId": "O48003",
--分销平台生成的订单号
"channelOrderId": "8",
--商户订单号
"status": "0000",
--订单提交结果响应码
"failReason": "失败的原因,成功则为空"
--订单提交失败原因
分销平台的充值接口是异步的,所以当商户发起充值请求后返回的并非最终充值结果,只是提交的结果。而由分销平台主动通知商户回调接口(notifyUrl)的才是最终充值结果。
必须保证服务器异步回调接口(notifyUrl)上无任何字符,如空格、特殊字符、开发系统自带抛出的异常提示信息等;
分销平台是用POST方式发送通知信息,并且响应的数据封装在请求体中,因此获取数据的方式,如:
InputStream is = HttpServletRequest.getInputStream();
分销平台主动发起通知,该方式才会被启用;
只有在分销平台的订单中存在该笔交易,且发生了状态的改变,分销平台才会通过该方式发起服务器通知;
服务器间的交互,不像页面跳转同步通知可以在页面上显示出来,这种交互方式是不可见的;
商户程序执行完后必须返回{“status” : 1}。如果商户反馈给分销平台的字符不是如上所示,那么分销平台会不断重发通知,直到重发次数超过3次;
商户程序执行完成后,不能执行页面跳转。如果执行页面跳转,分销平台会收不到上述字符,会被分销平台服务器判定为该页面程序运行出现异常,而重发处理结果通知;
该方式的调试与运行必须在服务器上,即互联网上能访问;
类型(长度范围)
是否可为空
分销平台生成的订单号
channelOrderId
商户订单号
商户定义的订单号
最终充值结果。0表示失败、1表示成功
failReason
充值失败描述
充值失败原因
数据注意事项
返回的数据格式采用的是JSON
返回的数据编码是UTF-8
商户业务处理注意事项
当分销平台处理完成后,分销平台会把处理结果以分销平台服务器主动通知商户的形式,反馈给商户。商户可以从服务器异步通知页面中获得这些信息,并且在验证通过的判断中增加商户的业务逻辑处理程序。当商户有传递参数 notifyUrl(服务器异步通知页面路径)时,商户必须根据分销平台不同类型的业务通知,正确的进行不同的业务处理,并且过滤重复的通知结果数据。对于充值接口,以异步通知中的充值处理结果业务数据为准。如果商户未正确处理业务通知,存在潜在的风险,商户自行承担因此而产生的所有损失。
在请求时需要获取Token及Cookie进行校验,防止重复提交
通过请求token接口(http://122.224.212.160:8980/token/get)得到一个由英文字母和数字组成的32位字符串的token值和一个SessionID(Cookie名称为:FMMarket,作用域:/)
返回数据格式
{"statusCode":200,"data":"MEIQME2PDO7ZF4X7WF0UNYQUE7IWVCIX"}
数据加密的主要目的是为了防止数据在传输过程中被抓取到明文分析并恶意利用
AES加密方式
在AES加密时,需要密钥(api.key)参与加密。该密钥是以英文字母和数字组成的32位的字符串。商户可登录分销平台开发者平台(),账户管理中查看。
加密方式:AES
算法模式:CBC
填充模式:PKCS5
初始化向量IV:0x31, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x38, 0x27, 0x36, 0x35, 0x33, 0x23, 0x32, 0x33
请求时加密
当拿到请求时的待加密的数据集后,需要使用密钥利用 AES加密函数对这个JSON格式的数据集进行加密运算,从而得到加密结果字符串(该字符串转换成byte数组赋值于请求body中)。
为提高加密性能,建议使用Bouncy Castle Inc.公司提供的算法包,以下样例中使用的就是该公司的算法包。其运算速度是jdk自带的10倍以上。
* Copyright
* The Project licenses this file to you under the Apache License,
* version 2.0 (the "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at:
http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
package com.mpt.fm.market.
import org.bouncycastle.crypto.CipherP
import org.bouncycastle.crypto.engines.AESFastE
import org.bouncycastle.crypto.modes.CBCBlockC
import org.bouncycastle.crypto.paddings.PaddedBufferedBlockC
import org.bouncycastle.crypto.params.KeyP
import org.bouncycastle.crypto.params.ParametersWithIV;
import org.bouncycastle.util.encoders.H
public final class AESUtils {
private static final byte[] INIT_VECTOR = { 0x31, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x38, 0x27, 0x36, 0x35, 0x33, 0x23, 0x32, 0x33 };
public static String encrypt(String content, String apiKey) throws Exception {
if (apiKey == null) {
throw new IllegalArgumentException("Key cannot be null!");
String encrypted =
byte[] keyBytes = apiKey.getBytes();
if (keyBytes.length != 32 && keyBytes.length != 24 && keyBytes.length != 16) {
throw new IllegalArgumentException("Key length must be 128/192/256 bits!");
byte[] encryptedBytes =
encryptedBytes = encrypt(content.getBytes(), keyBytes, INIT_VECTOR);
encrypted = new String(Hex.encode(encryptedBytes));
public static String decrypt(String content, String apiKey) throws Exception {
if (apiKey == null) {
throw new IllegalArgumentException("Key cannot be null!");
String decrypted =
byte[] encryptedContent = Hex.decode(content);
byte[] keyBytes = apiKey.getBytes();
byte[] decryptedBytes =
if (keyBytes.length != 32 && keyBytes.length != 24 && keyBytes.length != 16) {
throw new IllegalArgumentException("Key length must be 128/192/256 bits!");
decryptedBytes = decrypt(encryptedContent, keyBytes, INIT_VECTOR);
decrypted = new String(decryptedBytes);
private static byte[] encrypt(byte[] plain, byte[] key, byte[] iv) throws Exception {
PaddedBufferedBlockCipher aes = new PaddedBufferedBlockCipher(new CBCBlockCipher(new AESFastEngine()));
CipherParameters ivAndKey = new ParametersWithIV(new KeyParameter(key), iv);
aes.init(true, ivAndKey);
return cipherData(aes, plain);
private static byte[] decrypt(byte[] cipher, byte[] key, byte[] iv) throws Exception {
PaddedBufferedBlockCipher aes = new PaddedBufferedBlockCipher(new CBCBlockCipher(new AESFastEngine()));
CipherParameters ivAndKey = new ParametersWithIV(new KeyParameter(key), iv);
aes.init(false, ivAndKey);
return cipherData(aes, cipher);
private static byte[] cipherData(PaddedBufferedBlockCipher cipher, byte[] data) throws Exception {
int minSize = cipher.getOutputSize(data.length);
byte[] outBuf = new byte[minSize];
int length1 = cipher.processBytes(data, 0, data.length, outBuf, 0);
int length2 = cipher.doFinal(outBuf, length1);
int actualLength = length1 + length2;
byte[] result = new byte[actualLength];
System.arraycopy(outBuf, 0, result, 0, result.length);
public static void main(String[] args) {
String apiKey = "Your apiKey";
String content = "test12345";
long start = System.currentTimeMillis();
String encrypt = encrypt(content, apiKey);
System.out.println(System.currentTimeMillis() - start + " ms");
System.out.println(encrypt);
String decrypt = decrypt(encrypt, apiKey);
System.out.println(decrypt);
catch (Exception e) {
e.printStackTrace();
class CryptAES
protected $cipher
= MCRYPT_RIJNDAEL_128;
protected $mode
= MCRYPT_MODE_CBC;
protected $pad_method = NULL;
protected $secret_key = '';
protected $iv
public function set_cipher($cipher)
$this->cipher = $
public function set_mode($mode)
$this->mode = $
public function set_iv($iv)
$this->iv = $
public function set_key($key)
$this->secret_key = $
public function require_pkcs5()
$this->pad_method = 'pkcs5';
protected function pad_or_unpad($str, $ext)
if ( is_null($this->pad_method) )
$func_name = __CLASS__ . '::' . $this->pad_method . '_' . $ext . 'pad';
if ( is_callable($func_name) )
$size = mcrypt_get_block_size($this->cipher, $this->mode);
return call_user_func($func_name, $str, $size);
protected function pad($str)
return $this->pad_or_unpad($str, '');
protected function unpad($str)
return $this->pad_or_unpad($str, 'un');
public function encrypt($str)
$str = $this->pad($str);
$td = mcrypt_module_open($this->cipher, '', $this->mode, '');
if ( empty($this->iv) )
$iv = @mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
$iv = $this->
mcrypt_generic_init($td, $this->secret_key, $iv);
$cyper_text = mcrypt_generic($td, $str);
$rt = bin2hex($cyper_text);
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
public function decrypt($str){
$td = mcrypt_module_open($this->cipher, '', $this->mode, '');
if ( empty($this->iv) )
$iv = @mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
$iv = $this->
mcrypt_generic_init($td, $this->secret_key, $iv);
$decrypted_text = mdecrypt_generic($td, self::hex2bin($str));
$rt = $decrypted_
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
return $this->unpad($rt);
public static function hex2bin($hexdata) {
$bindata = '';
$length = strlen($hexdata);
for ($i=0; $i
strlen($text))
if (strspn($text, chr($pad), strlen($text) - $pad) != $pad)
return substr($text, 0, -1 * $pad);
$aes = new CryptAES();
$aes->set_key('Your apiKey’);
$aes->set_iv(chr(0x31) . chr(0x37) . chr(0x36) . chr(0x35) . chr(0x34) . chr(0x33) . chr(0x32) . chr(0x31).
chr(0x38) . chr(0x27) . chr(0x36) . chr(0x35) . chr(0x33) . chr(0x23) . chr(0x32) . chr(0x33));
$aes->require_pkcs5();
$rt = $aes->encrypt('test12345');
echo $rt . '&br/&';
echo $aes->decrypt($rt) . '&br/&';
数据摘要的主要目的是为了防止数据在传输过程中进行恶意篡改
请求时签名
当拿到待签名的AES加密后的数据集数据后,利用MD5加密函数对这个密文进行签名运算,从而得到32位签名结果字符串(该字符串赋值于参数d)。
签名机制(数字签名)的主要目的是为了防止数据在传输过程中进行恶意篡改
生成待签名的字符串
需要参与签名的参数
签约的分销平台账号对应的唯一用户号。
如:200000
secert_key
该私钥用来参与签名,是以英文字母和数字组成的16位的字符串。商户可登录分销平台开发者平台(),账户管理中查看。
如:w9xoiLhbmjhF0taw
通知摘要机制签名后得到的字符串。
如:587319CBAD8053762ECC63D735572ACA
time_in_millis
请求时间(毫秒)。
生成待签名的字符串
对于如下的参数值数组:
[100000, w9xoiLhbmjhF0taw, 587319CBAD8053762ECC63D735572ACA, 0]
对数组里的每一个值从 a 到 z 的顺序排序,若遇到相同首字母,则看第二个字母,以此类推。排序之后再反转整个数组得到字符串。如:
w9xoiLhbmjhF0taw587319CBAD8053762ECC63D735572ACA0100000
这串字符串便是待签名字符串。
请求时签名
当拿到待签名的字符串后,利用SHA-1加密函数对这个字符串进行签名运算,从而得到签名结果字符串(一般这个字符串的长度为40,该字符串赋值于参数s)。
验证此次通知信息是否是分销平台服务器发来的信息,以帮助校验反馈回来的数据的真假性。
接口响应码
请求失败,原因不明确
系统当前处于维护中,请求拒绝
请求内容为空
非法的token
非法的请求参数
非法的数字签名
非法的摘要
非法的开发者密钥
非法的数字签名密钥
订单提交结果
订单提交成功
订单提交失败,充值的手机号码为空
订单提交失败,充值的手机号码不正确或不支持
订单提交失败,订单号为空
订单提交失败,订单号超出最大长度(30位)
订单提交失败,回调地址为空
订单提交失败,充值面值格式不正确
订单提交失败,充值类型不正确
订单提交失败,订单重复
订单提交失败,无法创建订单
订单提交失败,手机号码查询区域为空
订单提交失败,账户余额不足
订单提交失败,扣款失败
订单提交失败,退款失败
订单提交失败,退款成功
订单提交失败,所充值的产品不存在
订单提交失败,所充值的产品没有报价信息
订单提交失败,请求参数不完整
订单提交失败,充值渠道暂不可用
订单提交失败,流量包可充值范围为空
订单提交失败,没有可与充值范围匹配的流量包
订单提交失败,平台接口异常
订单提交失败,平台接口不可用
当前版本:1.0.1&&最后更新于:全国三网流量招收实力代理, 流量充值平台,手机电脑都可以流畅运行,充值速度快。平台终身免费。--广州大学城兼职网,大学城最好的兼职网
||||||||||&
全国三网流量招收实力代理, 流量充值平台,手机电脑都可以流畅运行,充值速度快。平台终身免费。
发表时间:&
全国三网流量招收实力代理,&流量充值平台,手机电脑都可以流畅运行,充值速度快。全国三网流量招收实力代理,&流量充值平台,手机电脑都可以流畅运行,充值速度快。平台终身免费。&移动,联通,电信都能充值流量。流量价格5.7折,很有市场竞争力。求合作代理或自用!无需问真假,截图可知。想赚钱找我吧,利用上班时间,课余时间都可以做的。只要你用心去推广,宣传,搞点活动,很多人都会找你充的,一天赚100完全没问题。无底薪,有提成。加我微信:应聘时请说明是在看到的。如果您觉得此兼职是虚假或无效或骗人的,可以举报此兼职找兼职防骗提示:应聘时请不要以任何名义交钱给任何单位或个人!
&兼职前以任何名目需先交会员费、押金、车费、服装费、摄影费等的100%假兼职,打字员、文字录入兼职是假兼职,网赚、娱乐场所的兼职也请大家小心!
&本网兼职信息经过:1.系统黑名单匹配审核;2.人工审核(两个审核关),如还发现不实信息,欢迎在本网,一经查实,该假招聘方即被录入黑名单!
&&&&&&版权所有:&&广州大学城兼职网(www.)&&本站信息严禁任何机构复制或转载,否则我们必将法律追责!!
&&&&&&CopyRight&& &www.&All Rights Reserved
微信号:dxcjob
&&&&&&网站管理员电话:&&;&;&&&& 微博:@大学城周sir &&广州大学城兼职防骗网&
&&&&&&网站客服邮箱:&&;&;&
&&&&&&网站客服Q&Q:&&
&&&&&&&免责声明:本站网友发表的任何内容,不代表本站立场,如侵犯您权益,请联系我们删除!

我要回帖

更多关于 流量红包充值软件 的文章

 

随机推荐