php实现金币提现,PHP实现微信提现功能

本文实例为大家分享了PHP实现微信提现功能的具体代码,供大家参考,具体内容如下

一、实现功能

这几天在小程序里要实现用户从系统中提现到零钱的功能,查了一下文档可以使用 企业付款到用户零钱 来实现;

官方文档

注意事项:商户打款时是从商户可用余额中减钱,所以确保商户可用余额充足,同时注意官方文档中的付款规则;

二、PHP实现

//封装提现方法

function tixian($money){

$appid = "################";//商户账号appid

$secret = "##########";//api密码

$mch_id = "#######";//商户号

$mch_no = "#######";

$openid="123456789";//授权用户openid

$arr = array();

$arr['mch_appid'] = $appid;

$arr['mchid'] = $mch_id;

$arr['nonce_str'] = ugv::randomid(20);//随机字符串,不长于32位

$arr['partner_trade_no'] = '1298016501' . date("Ymd") . rand(10000, 90000) . rand(10000, 90000);//商户订单号

$arr['openid'] = $openid;

$arr['check_name'] = 'NO_CHECK';//是否验证用户真实姓名,这里不验证

$arr['amount'] = $money;//付款金额,单位为分

$desc = "###提现";

$arr['desc'] = $desc;//描述信息

$arr['spbill_create_ip'] = '192.168.0.1';//获取服务器的ip

//封装的关于签名的算法

$notify = new Notify_pub();

$notify->weixin_app_config = array();

$notify->weixin_app_config['KEY'] = $mch_no;

$arr['sign'] = $notify->getSign($arr);//签名

$var = $notify->arrayToXml($arr);

$xml = $this->curl_post_ssl('https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers', $var, 30, array(), 1);

$rdata = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA);

$return_code = (string)$rdata->return_code;

$result_code = (string)$rdata->result_code;

$return_code = trim(strtoupper($return_code));

$result_code = trim(strtoupper($result_code));

if ($return_code == 'SUCCESS' && $result_code == 'SUCCESS') {

$isrr = array(

'con'=>'ok',

'error' => 0,

);

} else {

$returnmsg = (string)$rdata->return_msg;

$isrr = array(

'error' => 1,

'errmsg' => $returnmsg,

);

}

return json_encode($isrr);

}

//上个方法中用到的curl_post_ssl()

function curl_post_ssl($url, $vars, $second = 30, $aHeader = array())

{

$isdir = "/cert/";//证书位置

$ch = curl_init();//初始化curl

curl_setopt($ch, CURLOPT_TIMEOUT, $second);//设置执行最长秒数

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上

curl_setopt($ch, CURLOPT_URL, $url);//抓取指定网页

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);// 终止从服务端进行验证

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);//

curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'PEM');//证书类型

curl_setopt($ch, CURLOPT_SSLCERT, $isdir . 'apiclient_cert.pem');//证书位置

curl_setopt($ch, CURLOPT_SSLKEYTYPE, 'PEM');//CURLOPT_SSLKEY中规定的私钥的加密类型

curl_setopt($ch, CURLOPT_SSLKEY, $isdir . 'apiclient_key.pem');//证书位置

curl_setopt($ch, CURLOPT_CAINFO, 'PEM');

curl_setopt($ch, CURLOPT_CAINFO, $isdir . 'rootca.pem');

if (count($aHeader) >= 1) {

curl_setopt($ch, CURLOPT_HTTPHEADER, $aHeader);//设置头部

}

curl_setopt($ch, CURLOPT_POST, 1);//post提交方式

curl_setopt($ch, CURLOPT_POSTFIELDS, $vars);//全部数据使用HTTP协议中的"POST"操作来发送

$data = curl_exec($ch);//执行回话

if ($data) {

curl_close($ch);

return $data;

} else {

$error = curl_errno($ch);

echo "call faild, errorCode:$errorn";

curl_close($ch);

return false;

}

}

三、补充

关于具体签名算法,可参考微信官方文档;

简单示范签名算法:

//将要发送的数据整理为$data

ksort($data);//排序

//使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串

$str='';

foreach($data as $k=>$v) {

$str.=$k.'='.$v.'&';

}

//拼接API密钥

$str.='key='.$secrect;

$data['sign']=md5($str);//加密

将数组转换成xml格式(简单方法):

//遍历数组方法

function arraytoxml($data){

$str='';

foreach($data as $k=>$v) {

$str.=''.$v.''.$k.'>';

}

$str.='';

return $str;

}

将xml格式转换为数组:

function xmltoarray($xml) {

//禁止引用外部xml实体

libxml_disable_entity_loader(true);

$xmlstring = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA);

$val = json_decode(json_encode($xmlstring),true);

return $val;

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/245042.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle 同义词_【干货7】Oracle知识关键代码摘要

(如果我分享的干货内容对你有帮助,可以通过赞或者评论的方式告诉我,我会持续分享;或者留言你想要的IT方面的支持,我将分享大家感兴趣的IT类技术干货;如果没有收到大家的反馈,10天后我将停止技术…

php new static,PHP面向对象中new self( )和 new static( ) 的区别

首先阐明结论,在PHP中 self指向定义了当前被调用方法的类, static指向调用当前静态方法的类。接下来通过一个例子来证明上面的结果class A{public static $_a Class A;public static function echoProperty(){echo self::$_a . PHP_EOL;}}class B exten…

python 动态规划_DP动态规划(Python实现)

前言_我们遇到的问题中,有很大一部分可以用动态规划(简称DP)来解。 解决这类问题可以很大地提升你的能力与技巧,我会试着帮助你理解如何使用DP来解题。 这篇文章是基于实例展开来讲的,因为干巴巴的理论实在不好理解。注意:如果你对…

php gif 透明,解决PHP剪切缩略图生成png,gif透明图时,黑色背景问题

背景图填充白色背景$white imagecolorallocate($dstim,255,255,255);imagefilledrectangle($dstim,0,0,$width,$height,$white);imagecolortransparent($dstim,$white);设置图片走透明通道$img imagecreatefrompng($src);imagesavealpha($img,true);//这里很重要;$thumb ima…

qt做的接收串口数据并显示曲线_QT无人机地面站设计与制作

近年来,无人机可谓是大火。无论是军事,还是民用,它的地位更是不用说。但,如何利用利用现有技术对无人机的信息进行操作,实现人、机合一呢?“无人机地面站”应运而生,结合仿真系统为地面工作人员…

php直接读取csv文件,php实现的读取CSV文件函数示例

本文实例讲述了php实现的读取CSV文件函数。分享给大家供大家参考,具体如下:function read_csv($cvs) {$shuang false;$str file_get_contents($cvs);for ($i0;$iif($str{$i}") {if($shuang) {if($str{$i1}") {$str{$i} *;$str{$i1} *;} el…

系统背景描述_【计算机论文】管件加工管理系统和数据库的结构探析

摘 要:结合"中国制造2025"及德国"工业4.0"的发展趋势,概述目前国内管件生产加工流程的现状和不足,基于对管件加工过程中管件之间的差别、管件加工批次的混合等特点导致的管理难点分析,介绍管件生产加工管理系统的设计思路和工作流程,并对该系统未来可进一步…

python中的命令行参数_python学习笔记6:命令行参数

1. 使用步骤使用步骤如下:# 导入模块import argparse# 获取parser, description文本会显示在help信息中parser argparse.ArgumentParser(descriptionargs discrip)# 添加选项, 具体选项类型见后面各节parser.add_argument(-a)# 解析选项args parser.parse_args(sys.argv[1:])…

php 年的第几天,收藏-php中某年第几天计算出日期年月日的代码

很实用的小功能,希望对大家有帮助。这个索引值除了方便面数据的记录和搜索,还起着记录日期信息的作用,信息量很可观。那么,如何还原索引值为可用的日期资讯呢?date(z)返回的是一年中的第几天,返回值为从0开…

shell tr 替换 空格_Shell 字符串分隔符!!!(全网最详细总结)

前言:在shell脚本编程中,我们经常会用到切割字符串,类似于python中的split。但shell中的命令比较五花八门,小编也是苦扰了很久,终于下定决心对它做一个总结。方法一:字符串替换法#/bin/bashstring"Hel…

php where 不包含,php – 除非它们包含“where”或“like”子句,否则不允许删除

我的查询 –$shortlistpartners是数组$this->db->delete(shortlist_partners);$this->db->where(opp_id,$this->input->post(opp_id));$this->db->where_in(partner_id,$shortlistpartners);除非它们包含“where”或“like”子句,否则不允许删除.错误即…

本机用域名不能访问_域名注册申请网站域名注意事项

互联网用户越来越多,也有越来越多人搭建网站,做个人博客也好、搭建企业官网也好,数量都在逐步上升。做网站的数量在上升,域名注册量肯定也在上升。有的朋友头一次注册域名,对域名不了解也不知道申请网站域名该注意哪些…

电脑微信不用手机确认_不用安装第三方软件,手机投屏到电脑就这么简单

在头条上收到网友的提问,如果想把手机的内容投影到电脑上,该怎么做?为此我做一个简单的教程,不用安装第三方软件,就用Windows 10自带的无线显示功能和安卓手机的自带无线显示功能来实现。前提条件:1. 电脑是…

php图片截取后缀,PHP抓取远程图片(含不带后缀的)教程详解

一、创建项目作为演示,我们在www根目录创建项目grabimg,创建一个类GrabImage.php和一个index.php。二、编写类代码我们定义一个和文件名相同的类:GrabImageclass GrabImage{}三、属性接下来定义几个需要使用的属性。1、首先定义一个需要抓取的…

tomcat7 https 拒绝连接_物与网怎么连接呢?物联网架构及五大通信协议

消息触达能力是物联网(internet ofthings, IOT)的重要支撑,而物联网很多技术都源于移动互联网。柳猫将阐述移动互联网消息推送技术在物联网中的应用和演进。一、物联网架构和关键技术从开发的角度,无线接入是物联网设备端的核心技术,身份设备…

安卓手机浏览器排行_5g时代已来临!五月安卓手机性价比排行:两千元以上5G手机屠榜...

5月已经过去,同时也标志着今年上半年手机的发布已经告一段落。那么在这段时间里,智能手机的性价比如何呢?考虑到现在已经开始步入5G时代,所以智能手机的价格也是普遍上涨,想要找到一款性价比不错的手机似乎有些难度。现…

noclassdeffounderror java,从终端运行Java文件时出现java.lang.NoClassDefFoundError

我是Java新手。我一直在使用Eclipse测试一个简单的Java类(名为NewHelloWorld),它在控制台中运行良好。当我尝试从终端执行相同的操作时,它会正确编译(创建HelloWorld.class而不给出任何错误),但是随后javaNewHelloWorld显示以下错误Exception…

tp3.2 不能提交到action方法_什么是死锁,如何避免死锁(4种方法)

当两个线程相互等待对方释放资源时,就会发生死锁。Python 解释器没有监测,也不会主动采取措施来处理死锁情况,所以在进行多线程编程时应该采取措施避免出现死锁。一旦出现死锁,整个程序既不会发生任何异常,也不会给出任…

虚拟局域网软件开源_ZeroTier虚拟局域网免费远程桌面体验--替代TeamViewer

本文主要是关于使用ZeroTier创建虚拟局域网来实现免费远程桌面的方案的体验,包含了一些对不同方案的优缺点的描述。最近因为疫情在家不得不通过远程连接实验室电脑,有两种基本的解决方案:连接学校VPN,然后使用系统自带的远程桌面连…

java复制的函数会报错,2 面试题之面向对象

大纲:一、两个重要概念① 请说明类和对象的区别类是对某一类实物的描述,是抽象的;对象是一个实实在在的个体,是类的一个实例;② 解释一下什么是类加载机制、双亲委派模型,好处是什么?类加载机制…