<?php
/**
* Created by PhpStorm.
* User: xpz
* Date: 2021/12/15
* Time: 9:44
* qq 1522508767
*/
namespace app\api\controller;
use app\common\controller\Api;
class Jspay extends Api
{
// 无需登录的接口,*表示全部
protected $noNeedLogin = ['notify'];
// 无需鉴权的接口,*表示全部
protected $noNeedRight = ['*'];
protected $userInfo = [];
//微信支付设置
protected $appId = '你的公众号id';
protected $mchId = '微信支付商户号';
protected $wechatKey = '商户平台设置的密钥key';
protected $notifyUrl = '支付成功回调url';
const UNURL = "https://api.mch.weixin.qq.com/pay/unifiedorder"; //预订单
/***
*
* 使用说明:
* 1 这个只是jspai微信支付的后端验证,需要配合前端使用
* 2 预下单方法 unifiedorder 里有一个openid参数,这是从微信公众号获取的,我这里是提前获取到了,放到数据库里了。如果你没有获取,需要时时获取
* 3 其实就两个方法,一个是获取验证的方法 getJsApi 另一个就是回调方法 notify
* 4 访问地址:https://xxx.xxxxx.com/api/jspay/getJsApi?token=48f48a69-e8e2-420a-9bc2-f80f0c914b18
* 使用中有什么其他问题可以加qq联系 1522508767
*/
public function _initialize()
{
parent::_initialize();
}
/**
* 支付成功回调方法
*/
public function notify(){
$xmlData = file_get_contents("php://input");
$arr = $this->xml_to_data($xmlData);
$this->log($arr);
$sign = $arr['sign'];
unset($arr['sign']);
if(empty($arr)){
$this->log('没有获取到内容!');
exit;
}
$new_sign = makeSign($arr,$this->wechatKey);
$this->log($new_sign);
if($sign == $new_sign){
if(isset($arr['out_trade_no']) && !empty($arr['out_trade_no'])){
//你的订单处理逻辑
} else {
$arr['message'] = '订单号为空!';
$this->log($arr);
}
} else {
$arr['message'] = '签名验证失败!';
$this->log($arr);
}
}
/***
* 获取vip充值 普通会员
* 切记必须 要登录 要登录 要登录,重要的事情说三遍
*/
public function getJsApi(){
$this->userInfo = $this->auth->getUserinfo();//登录以后才可以获取用户信息
$this->getJsApiData(69800, 'chongzhi', 2, $this->userInfo);
}
/**
* @param $money 充值金额
* @param $body 充值说明
* @param $type 充值类型
* @param $user 获取的用户信息
*/
private function getJsApiData($money,$body,$type,$user){
// print_r('3333');exit;
$result = $this->unifiedorder($money,$body,$type,$user);
if($result['status'] == 0){
$prepay_id = $result['result']['prepay_id'];
} else {
$this->error("微信预下单出错!");
}
$data = [
'appId'=>$this->appId,
'timeStamp'=>'"'.time().'"',
'nonceStr'=>createNoncestr(),
'package'=>'prepay_id='.$prepay_id,
'signType'=>'MD5',
];
$data['paySign'] = makeSign($data,$this->wechatKey);
$this->success('成功!',$data);
}
/**
* 微信预订单
* @param type $money
* @param type $body
* @param type $type
* @param type $user
* @return type
*/
private function unifiedorder($money="1",$body="会员充值",$type='2',$user=[]){
// echo $money;exit;
$userip = get_client_ip(); //获得用户设备 IP
$order_id = getMillisecond().rand(100000,999999);//平台内部订单号
$params['appid'] = $this->appId; //应用 APPID
$params['mch_id'] = $this->mchId; //微信支付商户号
$params['out_trade_no'] = $order_id;
$params['nonce_str'] = createNoncestr();//随机字符串
$params['body'] = $body;//内容
$params['total_fee'] = $money; //金额
$params['spbill_create_ip'] = $userip; //IP
$params['notify_url'] = $this->notifyUrl; //回调地址
$params['trade_type'] = 'JSAPI';//交易类型 具体看 API 里面有详细介绍
$params['scene_info'] ='{"h5_info":{"type":"Wap","wap_url":"","wap_name":"pay"}}';//场景信息 必要参数
$params['attach'] = $order_id;
// print_r($params);exit;
$params['openid'] = $user['openid'];//这里的前提是已经获取到了用户的openid,否则你就要实时去通过微信接口获取openid
// print_r($params['openid']);exit;
$params['sign'] = makeSign($params,$this->wechatKey);
$post_data = data_to_xml($params);
$dataxml = postXmlCurl($post_data,self::UNURL); //后台 POST 微信传参地址 同时取得微信返回的参数
$objectxml = (array)simplexml_load_string($dataxml, 'SimpleXMLElement', LIBXML_NOCDATA); //将微信返回的 XML 转换成数组
if($objectxml['return_code'] == 'SUCCESS' && $objectxml['result_code'] == 'SUCCESS'){
//这里可以保存一下微信下单信息
return ['status'=>0,'message'=>'成功!','result'=>['prepay_id'=>$objectxml['prepay_id'],'order_id'=>$params['out_trade_no']]];
} else {
return ['status'=>1,'message'=>$objectxml['return_msg'],'result'=>[]];
}
}
/**
* @param $data
* 记日志
*/
private function log($data){
$dir = LOG_PATH.'pay_log/'.date('Y-m',time());
createDir($dir);
// echo $dir;exit;
$string = date('Y-m-d H:i:s')."\r\n";
if(is_array($data)){
$string .= var_export($data,true);
} else {
$string .= $data;
}
file_put_contents($dir."/pay.txt", $string."\r\n", FILE_APPEND);
}
}
xiaopzi123123
- 粉丝: 599
- 资源: 23
最新资源
- 英语的核心素养.doc
- 幼儿.园家长开放日活动方案.doc
- MATLAB仿真16QAM载波调制信号在AWGN信道下的误码率 形式:程序 程序实现功能:仿真16QAM载波调制信号在AWGN信道下的误码率和误比特率性能,并与理论值相比较 运行版本2014
- 自学考试计算机系统结构问答题汇总.doc
- 幼儿园防止小学化自查报告.doc
- 中级财务管理试题和答案.doc
- 专科《组织行为学》形成性考核册答案.doc
- 剑桥少儿英语考级要求.doc
- 剑桥少儿英语考级要求内容.doc
- 教师职称竞聘述职述廉报告.doc
- 竞选学生会申请书(精选多篇).doc
- 教科版科学四年级(上册)教学案物质在水中是若何溶解的.doc
- 临床医学专业临床肿瘤学课程试题资料讲解.doc
- 练习册翻译答案新编英语教程5第三版.doc
- 跨境电商初级人才考试试题.doc
- 罗宾斯管理学案例分析题答案详细讲解.doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
- 3
- 4
前往页