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 面向对象类)的更多相关文章

  1. 1445 送Q币

    1445 送Q币  时间限制: 1 s  空间限制: 1000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Description 一次在玩网络游戏的过程中,在 ...

  2. 《区块链100问》第13集:比特币和Q币有哪些不同?

    比特币是一种去中心化的数字资产,没有发行主体.Q币是由腾讯公司发行的电子货币,类似于电子积分,其实不是货币. Q币需要有中心化的发行机构,Q币因为腾讯公司的信用背书,才能被认可和使用.使用范围也局限在 ...

  3. 联通积分兑换的Q币怎么兑换到QQ上

    可登录联通积分商城http://jf.10010.com  查询和兑换Q币, 1,通过联通积分商城自主兑换,提交订单扣除积分成功后,10010端口将自动为您下发验证码短信. 2,在有效期内登陆Q币充值 ...

  4. 文字记录而已!!人民币直充/兑换PayPal美金

    人民币直充/兑换PayPal美金 用PAYPAL国际使用外国货币,没有信用卡是不能冲值的,到淘宝买吧,被骗的几率大一些,弄来弄去,PAYPAL被冻结. 今天朋友介绍使用 中美互动网 让它给自己的PAY ...

  5. 利用WPF生成Q币充值二维码——扫码登录篇

    一.前言 虽然腾讯官方不支持使用二维码充值Q币,但对于喜欢钻研的人来说这不是问题,本文利用WPF技术讲解从扫码登录到生成Q币充值二维码的一整套解决方案. 因为充值Q币需要先用QQ号登录官网.所以我们首 ...

  6. 最新 钢银电商java校招面经 (含整理过的面试题大全)

    从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.钢银电商等10家互联网公司的校招Offer,因为某些自身原因最终选择了钢银电商.6.7月主要是做系统复习.项目复盘.Leet ...

  7. 信息收集渠道:文本分享类网站Paste Site

    信息收集渠道:文本分享类网站Paste Site Paste Site是一种专门的文本分享的网站.用户可以将一段文本性质的内容(如代码)上传到网站,然后通过链接分享给其他用户.这一点很类似于现在的优酷 ...

  8. Java生鲜电商平台-生鲜电商中商品类目、属性、品牌、单位架构设计与实战

    Java生鲜电商平台-生鲜电商中商品类目.属性.品牌.单位架构设计与实战 说明:Java生鲜电商平台-生鲜电商中商品类目.属性.品牌.单位架构设计与实战经验分享 凡是涉及到购物,必然是建立在商品的基础 ...

  9. 思迅/泰格/科脉/收银软件/商超软件数据库修复解决断电造成损坏的mdb\dat文件SQL数据库 置疑 修复 恢复

    拥有专业管理软件数据库修复技术工程师,专业提供管家婆.美萍.思迅.科脉等管理软件技术服务,电脑维修\重装系统技 术服务.无法登陆打不开等出错问题处理(连接失败,请输入正确的服务器名,SQL Serve ...

随机推荐

  1. 【转】js中15个常用的正则表达式+正则集合

    1 用户名正则 //用户名正则,4到16位(字母,数字,下划线,减号) var uPattern = /^[a-zA-Z0-9_-]{4,16}$/; //输出 true console.log(uP ...

  2. Win10 开启 Hyper-V 安装 CentOS 7 minimal

    Win10 开启 Hyper-V 安装 CentOS 7 minimal 日常使用的 PC 环境一般都是 Windows 环境,如果需要偶尔使用 Linux 环境,一般情况下,大家的选择是安装虚拟机 ...

  3. python的for...in...if...语句

    Python中,for...[if]...语句一种简洁的构建List的方法,从for给定的List中选择出满足if条件的元素组成新的List,其中if是可以省略的.下面举几个简单的例子进行说明. &g ...

  4. Java Socket通信读取相关信息代码

    转自:http://developer.51cto.com/art/201003/190206.htm Java Socket通信读取有不少需要我们注意的知识点.当我们在使用的时候有很多的问题摆在我们 ...

  5. Asp.net MVC 中Code First 迁移使用

    如果模型类(数据库上下文类Context和POCO类)发生改变,与数据库中的结构不一致,系统默认会抛出一个异常.可以考虑使用代码优先迁移. 代码优先迁移执行UpSert数据库操作,它在每一次更新数据库 ...

  6. HDU 3944 DP? (Lucas定理)

    题意:在杨辉三角中让你从最上面到 第 n 行,第 m 列所经过的元素之和最小,只能斜向下或者直向下走. 析:很容易知道,如果 m 在n的左半部分,那么就先从 (n, m)向左,再直着向上,如果是在右半 ...

  7. PCB RabbitMQ的安装使用

    随着公司加大力度信息化建设,PCB企业各种各样的系统软件越来越多,整个公司订单流状态监控变得越来越不可控,是时候需采用新的方式来收集各系统状态节点状态了,以下记录RabbitMQ安装使用: 一.Rab ...

  8. TransposonPSI——转座子分析的入门自学

    最近需要做转座子分析,查找发现可以使用 TransposonPSI 来进行分析.但是登陆官网,该软件 update 时间为 2013 年,但是因为时间紧迫,暂时还没有进行其他方法的调研,所以先选用该软 ...

  9. 史上最详细最全的Linux上安装Oracle的教程-centos7

    一.安装Oracle前准备 1.创建运行oracle数据库的系统用户和用户组 [humf@localhost ~]$ su root #切换到root Password: [root@localhos ...

  10. 贪心 HDOJ 5385 The Path

    题目传送门 /* 题意:给一张图和一些有向边,问如何给边赋值使得d1 < d2 < .. < dx > ,,,< ddn 贪心:左边从2开始,右边从n开始,每次选择未标记 ...