Q币直充-迅银渠道商(php 面向对象类)
Q币直充的一个类实现 1 <?php
/**
* DEC : 迅银Q币直充
* User: David Wang
* Time: 2018/5/24 下午1:09
*/ namespace goods\classes; class XyDelivery extends Delivery {
private $cpid ;
private $key ;
private $request_url = 'http://gw.api.xunyin.com/Pay';
private $notify_url;
public $order_id;
public $service_ip; public function __construct() {
$this->cpid = ‘商户号’;
$this->key = ‘迅银分配的key’;
$this->request_url = ‘请求地址’;
$this->notify_url = ‘回调地址’;
$this->service_ip = ‘服务端IP’;
} public function getId() {
return 'xunyin';
} public function getName() {
return '迅银Q币直充';
} public function run($params) {
if (!$params['amount'] || !$params['account']) {
return false;
}
$data['cpid'] = $this->cpid;
//金额不同商品id不一样 1-5档 6-2000档
if ($params['amount'] < 6) {
$goods_id = 813937;
} else {
$goods_id = 800009;
}
$data['gamegoodid'] = $goods_id;
$data['createtime'] = date('YmdHis', time());
$data['account'] = $params['account'];
$data['orderid'] = $this->cr_order_no('ruanqin');
$data['buynum'] = $params['amount'];
$data['buyerIp'] = $this->service_ip;
$data['returnurl'] = $this->notify_url;
$data['sign'] = $this->createSign($data, 'pay');
$request = $this->request_url . '?' . $this->array_to_key($data);
$this->order_id = $data['orderid']; //这里curl get请求渠道商接口
$Curl = new Curlient();
$res = $Curl->request($request)->text(); $req = $this->xml_to_data($res);
if ($req['Code'] == '0000' || $req['Code'] == '8888') {
$this->order_id = $data['orderid']; return ['error' => 0, 'msg' => 'ok'];
} else {
return ['error' => 1, 'msg' => $req['msg']];
} } /**
* @param array $channel
*
* @return array
*/
public static function get_deliver_channel($channel) {
$channel['xunyin'] = new self(); return $channel;
} public function canEnable() {
return true;
} public function onCallback() {
$content = @file_get_contents('php://input');
if (!$content) {
return false;
}
$arr = $this->string_to_array($content);
$req['id'] = $arr['id'];
$req['userid'] = $arr['userid'];
$req['status'] = $arr['status'];
$req['code'] = $arr['code'];
$sign = $this->createSign($req);
if ($sign == $arr['sign']) {
$deliverModel = new GoodsDeliveryRecord();
$deliver_info = $deliverModel->get(['order_id' => $arr['id']])[0];
if($deliver_info){
if ($arr['status'] == 'SUCCESS' && $arr['code'] = '8888') {
//回调成功 做自己的业务处理吧 boy
return 'ok';
}else{
$err_data['note'] = $this->errorCode($arr['code']);
return $err_data;//错误代码 do somthing
}
}
} return false;
} private function string_to_array($content) {
$arr = explode('&', $content); $data = [];
foreach ($arr as $item) {
$it_arr = explode('=', $item);
$data[ $it_arr[0] ] = $it_arr[1];
} return $data;
} /**
* 生成订单编号
*
* @param string $prefix 前缀
*
* @return string
*/
protected function cr_order_no($prefix = '') {
return $prefix . date('YmdHis') . substr(microtime(), 2, 6);
} private function array_to_key($params) {
$string = '';
if (!empty($params)) {
$array = array();
foreach ($params as $key => $value) {
$array[] = $key . '=' . $value;
}
$string = implode("&", $array);
} return $string;
} /**
* @param array $params
*
* @return string
*/
private function createSign($params, $type = '') {
//这家的数据不用排序 按照他们的固定排序就行了 屌
if ($type) {
$data['cpid'] = $params['cpid'];
$data['gamegoodid'] = $params['gamegoodid'];
$data['createtime'] = $params['createtime'];
$data['account'] = $params['account'];
$data['orderid'] = $params['orderid'];
$data['buynum'] = $params['buynum'];
$params = $data;
}
$string = $this->array_to_key($params); return strtolower(md5($string . $this->key));
} /**
* 将xml转为array
*
* @param string $xml
* return array
*/
public function xml_to_data($xml) {
if (!$xml) {
return false;
}
//将XML转为array
//禁止引用外部xml实体
libxml_disable_entity_loader(true);
$data = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true); return $data;
} private function errorCode($code) {
$err_arr = ['8019' => '充值的金额有误', '8020' => '充值帐号有误', '8021' => '可疑订单,需要人工确认', '8030' => '充值失败', '9099' => '负利润报警', '8012' => '余额不足']; return $err_arr[ $code ];
} }
Q币直充-迅银渠道商(php 面向对象类)的更多相关文章
- 1445 送Q币
1445 送Q币 时间限制: 1 s 空间限制: 1000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 一次在玩网络游戏的过程中,在 ...
- 《区块链100问》第13集:比特币和Q币有哪些不同?
比特币是一种去中心化的数字资产,没有发行主体.Q币是由腾讯公司发行的电子货币,类似于电子积分,其实不是货币. Q币需要有中心化的发行机构,Q币因为腾讯公司的信用背书,才能被认可和使用.使用范围也局限在 ...
- 联通积分兑换的Q币怎么兑换到QQ上
可登录联通积分商城http://jf.10010.com 查询和兑换Q币, 1,通过联通积分商城自主兑换,提交订单扣除积分成功后,10010端口将自动为您下发验证码短信. 2,在有效期内登陆Q币充值 ...
- 文字记录而已!!人民币直充/兑换PayPal美金
人民币直充/兑换PayPal美金 用PAYPAL国际使用外国货币,没有信用卡是不能冲值的,到淘宝买吧,被骗的几率大一些,弄来弄去,PAYPAL被冻结. 今天朋友介绍使用 中美互动网 让它给自己的PAY ...
- 利用WPF生成Q币充值二维码——扫码登录篇
一.前言 虽然腾讯官方不支持使用二维码充值Q币,但对于喜欢钻研的人来说这不是问题,本文利用WPF技术讲解从扫码登录到生成Q币充值二维码的一整套解决方案. 因为充值Q币需要先用QQ号登录官网.所以我们首 ...
- 最新 钢银电商java校招面经 (含整理过的面试题大全)
从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.钢银电商等10家互联网公司的校招Offer,因为某些自身原因最终选择了钢银电商.6.7月主要是做系统复习.项目复盘.Leet ...
- 信息收集渠道:文本分享类网站Paste Site
信息收集渠道:文本分享类网站Paste Site Paste Site是一种专门的文本分享的网站.用户可以将一段文本性质的内容(如代码)上传到网站,然后通过链接分享给其他用户.这一点很类似于现在的优酷 ...
- Java生鲜电商平台-生鲜电商中商品类目、属性、品牌、单位架构设计与实战
Java生鲜电商平台-生鲜电商中商品类目.属性.品牌.单位架构设计与实战 说明:Java生鲜电商平台-生鲜电商中商品类目.属性.品牌.单位架构设计与实战经验分享 凡是涉及到购物,必然是建立在商品的基础 ...
- 思迅/泰格/科脉/收银软件/商超软件数据库修复解决断电造成损坏的mdb\dat文件SQL数据库 置疑 修复 恢复
拥有专业管理软件数据库修复技术工程师,专业提供管家婆.美萍.思迅.科脉等管理软件技术服务,电脑维修\重装系统技 术服务.无法登陆打不开等出错问题处理(连接失败,请输入正确的服务器名,SQL Serve ...
随机推荐
- 【SCOI 2003】 严格n元树
[题目链接] 点击打开链接 [算法] f[i]表示深度小于等于i的严格n元树 显然,一棵深度小于等于i的严格n元树,就是一个根节点,下面有n棵子树,这n棵子树都是深度小于等于i-1的严格n元树,每棵子 ...
- 【POJ 2152】 Fire
[题目链接] 点击打开链接 [算法] 同样是树形DP,但是比较难,笔者做这题看了题解 令f[i][j]表示在以i为根的子树中 1.在以i为根的子树中建一些消防站 2.在节点j必须建一个消防站 3.以i ...
- asp.net MVC 切换网站主题
首先要有一些定义后的CSS文件,本例是用Bootstrap作为前端框架,可以从http://bootswatch.com/网站上下载一些主题文件,也就是一些定义好的Bootstap.css的文件. 然 ...
- ubuntu 怎么格式化U盘?(转载)
转自:http://3168247.blog.51cto.com/3158247/605654 图形的话装一个gparted,找那个/dev/sdb,右击选择格式化,最后点“应用”.命令行:原则是先卸 ...
- Log4j日志等级
Log4j根据日志信息的重要程度,分OFF.FATAL.ERROR.WARN.INFO.DEBUG.ALL 当然再细分的话 还有 FATAL(严重错误), 但是Log4j官方建议实际实用的话,Log4 ...
- 洛谷 P1941 飞扬的小鸟【dp】
设f[i][j]为在坐标(i,j)时的最小点击次数,转移的话从i-1向上飞或者向下掉转移,注意转移完了之后要把管子部分赋值为inf #include<iostream> #include& ...
- 【OpenJ_Bailian - 4070 】全排列
全排列 Descriptions: 对于数组[1, 2, 3],他们按照从小到大的全排列是 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 现在给你一个正整数n,n小于8,输出 ...
- 转】[1.0.2] 详解基于maven管理-scala开发的spark项目开发环境的搭建与测试
场景 好的,假设项目数据调研与需求分析已接近尾声,马上进入Coding阶段了,辣么在Coding之前需要干马呢?是的,“统一开发工具.开发环境的搭建与本地测试.测试环境的搭建与测试” - 本文详细记录 ...
- JAVA启动参数三:非Stable参数
前面我们提到用-XX作为前缀的参数列表在jvm中可能是不健壮的,SUN也不推荐使用,后续可能会在没有通知的情况下就直接取消了:但是由于这些参数中的确有很多是对我们很有用的,比如我们经常会见到的-XX: ...
- 大小写 unix and windows
如果你没有使用工具, 只是sqlplus对大小写不敏感. 如果你要给sql传递参数,且在windows下面就不需要考虑.如果是aix系统,最好写一样.