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. str函数isdigit、isdecimal、isnumeric的区别

    s为字符串s.isalnum() 所有字符都是数字或者字母s.isalpha() 所有字符都是字母s.isdigit() 所有字符都是数字s.islower() 所有字符都是小写s.isupper() ...

  2. UI:单例的写法

    单例设计模式 参考 UIApplication sharedApplocation 详细解释 :参考 通讯录的helper 类的读取本地plist 文件的时候,使用的单例单例的要点有三个:一个类只能有 ...

  3. nodejs--JWT 在前后端分离中的应用与实践

    nodejs--JWT 在前后端分离中的应用与实践 http://www.cnblogs.com/lidongyue/p/5269695.html

  4. HDU1175:连连看(搜索)

    传送门 题意 给定一个n*m的矩阵,询问q次,两个方块是否能被消掉,弯折次数不超过两次 分析 这题写了有一个下午,思路很简单,但是有很多trick,(唉),我还是太弱 trick 初始判断:1.两点不 ...

  5. codeforces 28D(dp)

    D. Don't fear, DravDe is kind time limit per test 2 seconds memory limit per test 256 megabytes inpu ...

  6. mysql查询流程

    首先是连接器 连接器负责跟客户端来链接 链接成功后 mysql会先去查询缓存,之前是不是有查询的这条语句,之前执行过的话 就会以key-value的形式缓存到内存中,如果没有就会继续执行后面的,执行完 ...

  7. python 37条编程技巧-汇总(转载+整理)

    1.原地交换两个数字 x, y =10, 20 print x, y y, x = x, y print x, y 10 20 20 10 2.链状比较操作符 n = 10 print 1 < ...

  8. BZOJ2553 [BJWC2011]禁忌

    传送门 Description ​ 给你前alphabet个小写字母组成的字符集, 以及n个单词, 定义一个串s的禁忌值为 \(\sum_{i } [s[i] == Taboo[i]]\) , Tab ...

  9. [Usaco2017 Feb]Why Did the Cow Cross the Road II (Platinum)

    Description Farmer John is continuing to ponder the issue of cows crossing the road through his farm ...

  10. python面向对象的3个特点

    封装 封装是从业务逻辑中抽象对象时,要赋予对象相关数据与操作,将一些数据和操作打包在一起的过程.封装是使用对象的主要魅力之一,它提供了一个简单方法来创建复杂方案,解决了世界是如何工作的这一问题,我们自 ...