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 ...
随机推荐
- ThreadLocal工具类的使用(隔离思想)
ThreadLocal不是用来解决共享对象的多线程访问问题的, 通过ThreadLocal的set()方法设置到线程的ThreadLocal.ThreadLocalMap里的是是线程自己要存储的对象, ...
- AutoIT: WinGetText的作用
WinGetText是一个非常有用的函数,可以获取页面上一切可见的资源,这为自动化测试的验证功能提供了保证.可以使用一些字符串处理函数来对获取来的页面文本进行分析. If StringInStr(Wi ...
- Python进程、线程、协程的对比
1. 执行过程 每个线程有一个程序运行的入口.顺序执行序列和程序的出口.但是线程不能够独立执行,必须依存在进程中,由进程提供多个线程执行控制.每个线程都有他自己的一组CPU寄存器,称为线程的上下文,该 ...
- Spring Ioc容器核心类继承图
Spring IOC容器其实就是BeanFactory的实例,Spring中BeanFactory的类关系结构如下图: 从上图可以看出Beanfactory作为根接口又细化出三个二级接口,最后又有Co ...
- 【转】使用git将项目上传到github(最简单方法)
原文地址:http://www.cnblogs.com/cxk1995/p/5800196.html 首先你需要一个github账号,所有还没有的话先去注册吧! https://github.com/ ...
- redis过期键删除策略以及大key删除方法
今天遇到了一个前同事挖的坑,刷新缓存中商品信息时先让key过期,然后从数据库里取最新数据然后再放到缓存中,他是这样写的 redisTemplate.expire(CacheConst.GOOGS_PR ...
- ExtJS 4 MVC Viewport和card布局
http://ext4all.com/post/a-little-bit-strange-navigation 效果图: app/view/Viewport.js Ext.define('App.v ...
- poj 3130 How I Mathematician Wonder What You Are! 【半平面交】
求多边形的核,直接把所有边求半平面交判断有无即可 #include<iostream> #include<cstdio> #include<algorithm> # ...
- bzoj 2618【半平面交模板】
#include<iostream> #include<cstdio> #include<algorithm> #include<cmath> usin ...
- 《Windows核心编程系列》十谈谈同步设备IO与异步设备IO之异步IO
同步设备IO与异步设备IO之异步IO介绍 设备IO与cpu速度甚至是内存访问相比较都是比较慢的,而且更不可预测.虽然如此,通过使用异步设备IO我们仍然能够创造出更高效的程序. 同步IO时,发出IO请求 ...