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 ...
随机推荐
- str函数isdigit、isdecimal、isnumeric的区别
s为字符串s.isalnum() 所有字符都是数字或者字母s.isalpha() 所有字符都是字母s.isdigit() 所有字符都是数字s.islower() 所有字符都是小写s.isupper() ...
- UI:单例的写法
单例设计模式 参考 UIApplication sharedApplocation 详细解释 :参考 通讯录的helper 类的读取本地plist 文件的时候,使用的单例单例的要点有三个:一个类只能有 ...
- nodejs--JWT 在前后端分离中的应用与实践
nodejs--JWT 在前后端分离中的应用与实践 http://www.cnblogs.com/lidongyue/p/5269695.html
- HDU1175:连连看(搜索)
传送门 题意 给定一个n*m的矩阵,询问q次,两个方块是否能被消掉,弯折次数不超过两次 分析 这题写了有一个下午,思路很简单,但是有很多trick,(唉),我还是太弱 trick 初始判断:1.两点不 ...
- codeforces 28D(dp)
D. Don't fear, DravDe is kind time limit per test 2 seconds memory limit per test 256 megabytes inpu ...
- mysql查询流程
首先是连接器 连接器负责跟客户端来链接 链接成功后 mysql会先去查询缓存,之前是不是有查询的这条语句,之前执行过的话 就会以key-value的形式缓存到内存中,如果没有就会继续执行后面的,执行完 ...
- 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 < ...
- BZOJ2553 [BJWC2011]禁忌
传送门 Description 给你前alphabet个小写字母组成的字符集, 以及n个单词, 定义一个串s的禁忌值为 \(\sum_{i } [s[i] == Taboo[i]]\) , Tab ...
- [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 ...
- python面向对象的3个特点
封装 封装是从业务逻辑中抽象对象时,要赋予对象相关数据与操作,将一些数据和操作打包在一起的过程.封装是使用对象的主要魅力之一,它提供了一个简单方法来创建复杂方案,解决了世界是如何工作的这一问题,我们自 ...