小程序接口2

<?php/** * 微信企业付款接口 * @author jorsh20160108 */class QypayController extends WapBaseController {

protected $payurl = ‘https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers‘;    protected $appid = ‘appid‘; //appid    protected $mchid = ‘mchid‘;    protected $signkey =‘signkey‘;//支付密钥

//这里的路径很重要  一定要写相对路径    protected $cacab =  array(        ‘api_cert‘=> ‘证书地址‘,          ‘api_key‘=> ‘证书地址‘,        ‘api_ca‘=> ‘证书地址‘,    );    //$data 要传递的参数, $wxchat微信企业支付等信息     /** $data 格式如下     *  $data = array(            ‘userid‘ //申请退款者ID            ‘openid‘ //退款者openid            ‘refundid‘ //退款申请ID            ‘money‘ //退款金额            ‘desc‘  //退款描述        );     *     */    public function wxbuild($data, $wxchat){        //判断有没有CA证书及支付信息        if(empty($wxchat[‘api_cert‘]) || empty($wxchat[‘api_key‘]) || empty($wxchat[‘api_ca‘]) || empty($wxchat[‘appid‘]) || empty($wxchat[‘mchid‘])){            $wxchat[‘appid‘] = $this->appid;            $wxchat[‘mchid‘] = $this->mchid;            $wxchat[‘api_cert‘] = $this->cacab[‘api_cert‘];            $wxchat[‘api_key‘] = $this->cacab[‘api_key‘];            $wxchat[‘api_ca‘] = $this->cacab[‘api_ca‘];        }        // dump($wxchat);die;        $webdata = array(            ‘mch_appid‘ => $wxchat[‘appid‘],            ‘mchid‘     => $wxchat[‘mchid‘],            ‘nonce_str‘ => md5(time()),            //‘device_info‘ => ‘1000‘,            // ‘partner_trade_no‘  => $data[‘userid‘].‘A‘.$data[‘refundid‘].‘B‘.$data[‘money‘], //商户订单号,需要唯一            ‘partner_trade_no‘  => time().$data[‘userid‘], //商户订单号,需要唯一            ‘openid‘    => $data[‘openid‘],            ‘check_name‘=> ‘NO_CHECK‘, //OPTION_CHECK不强制校验真实姓名, FORCE_CHECK:强制 NO_CHECK:            //‘re_user_name‘ => ‘jorsh‘, //收款人用户姓名            ‘amount‘    => $data[‘money‘] * 100, //付款金额单位为分            ‘desc‘      => empty($data[‘desc‘])? ‘商户支付‘ : $data[‘desc‘],            ‘spbill_create_ip‘ => $this->getip(),        );        // dump($webdata);die;        foreach ($webdata as $k => $v) {            $tarr[] =$k.‘=‘.$v;        }        sort($tarr);        $sign = implode($tarr, ‘&‘);        $sign .= ‘&key=‘.$this->signkey;        $webdata[‘sign‘]=strtoupper(md5($sign));        $wget = $this->array2xml($webdata);        $res = $this->http_post($this->payurl, $wget, $wxchat);        if(!$res){            return array(‘status‘=>1, ‘msg‘=>"Can‘t connect the server" );        }        $content = simplexml_load_string($res, ‘SimpleXMLElement‘, LIBXML_NOCDATA);        if(strval($content->return_code) == ‘FAIL‘){            return array(‘status‘=>1, ‘msg‘=>strval($content->return_msg));        }        if(strval($content->result_code) == ‘FAIL‘){            return array(‘status‘=>1, ‘msg‘=>strval($content->err_code),‘:‘.strval($content->err_code_des));        }        $rdata = array(            ‘mch_appid‘        => strval($content->mch_appid),            ‘mchid‘            => strval($content->mchid),            ‘device_info‘      => strval($content->device_info),            ‘nonce_str‘        => strval($content->nonce_str),            ‘result_code‘      => strval($content->result_code),            ‘partner_trade_no‘ => strval($content->partner_trade_no),            ‘payment_no‘       => strval($content->payment_no),            ‘payment_time‘     => strval($content->payment_time),        );        return $rdata;    }

public function getip() {        static $ip = ‘‘;        $ip = $_SERVER[‘REMOTE_ADDR‘];        if(isset($_SERVER[‘HTTP_CDN_SRC_IP‘])) {            $ip = $_SERVER[‘HTTP_CDN_SRC_IP‘];        } elseif (isset($_SERVER[‘HTTP_CLIENT_IP‘]) && preg_match(‘/^([0-9]{1,3}\.){3}[0-9]{1,3}$/‘, $_SERVER[‘HTTP_CLIENT_IP‘])) {            $ip = $_SERVER[‘HTTP_CLIENT_IP‘];        } elseif(isset($_SERVER[‘HTTP_X_FORWARDED_FOR‘]) AND preg_match_all(‘#\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}#s‘, $_SERVER[‘HTTP_X_FORWARDED_FOR‘], $matches)) {            foreach ($matches[0] AS $xip) {                if (!preg_match(‘#^(10|172\.16|192\.168)\.#‘, $xip)) {                    $ip = $xip;                    break;                }            }        }        return $ip;    }

/**     * 将一个数组转换为 XML 结构的字符串     * @param array $arr 要转换的数组     * @param int $level 节点层级, 1 为 Root.     * @return string XML 结构的字符串     */    public function array2xml($arr, $level = 1) {        $s = $level == 1 ? "<xml>" : ‘‘;        foreach($arr as $tagname => $value) {            if (is_numeric($tagname)) {                $tagname = $value[‘TagName‘];                unset($value[‘TagName‘]);            }            if(!is_array($value)) {                $s .= "<{$tagname}>".(!is_numeric($value) ? ‘<![CDATA[‘ : ‘‘).$value.(!is_numeric($value) ? ‘]]>‘ : ‘‘)."</{$tagname}>";            } else {                $s .= "<{$tagname}>" . $this->array2xml($value, $level + 1)."</{$tagname}>";            }        }        $s = preg_replace("/([\x01-\x08\x0b-\x0c\x0e-\x1f])+/", ‘ ‘, $s);        return $level == 1 ? $s."</xml>" : $s;    }    public function http_post($url, $param, $wxchat) {        $oCurl = curl_init();        if (stripos($url, "https://") !== FALSE) {            curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, FALSE);            curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, FALSE);        }        if (is_string($param)) {            $strPOST = $param;        } else {            $aPOST = array();            foreach ($param as $key => $val) {                $aPOST[] = $key . "=" . urlencode($val);            }            $strPOST = join("&", $aPOST);        }        curl_setopt($oCurl, CURLOPT_URL, $url);        curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1);        curl_setopt($oCurl, CURLOPT_POST, true);        curl_setopt($oCurl, CURLOPT_POSTFIELDS, $strPOST);        if($wxchat){            curl_setopt($oCurl,CURLOPT_SSLCERT,dirname(THINK_PATH).$wxchat[‘api_cert‘]);            curl_setopt($oCurl,CURLOPT_SSLKEY,dirname(THINK_PATH).$wxchat[‘api_key‘]);            curl_setopt($oCurl,CURLOPT_CAINFO,dirname(THINK_PATH).$wxchat[‘api_ca‘]);        }        $sContent = curl_exec($oCurl);        $aStatus = curl_getinfo($oCurl);        curl_close($oCurl);        if (intval($aStatus["http_code"]) == 200) {            return $sContent;        } else {            return false;        }    }

//企业付款测试    public function test(){        // dump(get_openid());die;        $data = array(            ‘userid‘ => ‘用户id‘,       //用户ID   做更新状态使用            ‘openid‘ => ‘openid‘,     //收钱的人微信 OPENID            ‘refundid‘ => 1,        //退款申请ID            ‘money‘    => 1,        //金额            ‘desc‘     => ‘商户支付‘, //支付title        );

$res = $this->wxbuild($data, ‘‘);        $this->ajaxReturn($res);    }

}
时间: 2024-08-30 13:27:57

小程序接口2的相关文章

小程序接口1

class XpayController extends WapBaseController{ public function payweixinx(){ $appid='wx00000000000000'; $openid= 'openid'; $mch_id='1111111111'; $key='888888888888888888888888888'; $out_trade_no = $mch_id. time(); $total_fee = I('money'); if(empty($

×××小程序接口调试

×××小程序接口实现 https 并通过域名进行访问 关于tomcat接口调试的问题 :要实现通过这个接口https:/域名/具体路径,访问后端tomcat 重点:因为我们公司是阿里的云服务器,所以需要现在阿里上生成证书,并绑定域名,然后在反向代理服务器的nginx配置文件里面 https下面 添加信息,实现通过域名跳转至后端tomcat指定端口. vim /etc/nginx/nginx.conf vim /etc/nginx/nginx.conf .... .... .... server

小程序接口请求成功,得不到请求数据

小程序接口请求成功但是请求不到数据,解决办法:在wx.request({})的header中添加 'content-type': 'application/x-www-form-urlencoded', 主要代码如下: header: { 'content-type': 'application/x-www-form-urlencoded',//解决请求不到数据 'cookie': wx.getStorageSync("sessionid")//读取sessionid,当作cookie

Java生鲜电商平台-APP/小程序接口传输常见的加密算法及详解

说明:Java生鲜电商平台-APP/小程序接口传输常见的加密算法及详解,加密算法,是现在每个软件项目里必须用到的内容. 广泛应用在包括了用户登入.数字签名.数据传输等多个场合.今天我把常见的加密算法全部整理在这里,供大家学习参考. 首先,大家要知道加密算法能干什么,利用加密算法来对数据通信的过程进行加密传输是一种最常见的安全手段.利用该手段能够达到一下三个目的: 1.数据保密性,防止用户数据被窃取或泄露: 2.数据完整性,防止用户传输的数据被篡改: 3.通信双方身份确认,确保数据来源合法: 常见

.Net开源oss项目进度更新(含小程序接口)

和大家分享下当前OSS开源项目的进度情况: 一. OSS.Common [开源中国] [github] 经过昨天的努力,oss.common项目初步完成了对.net standard的支持,迁移过程本周以新文章的形式开放给大家,当前解决方案有两个: OSS.Common.NET40 - 针对原来.net framework项目继续提供支持. OSS.Common.Standard - 针对新的可以多平台的可移植项目支持(已经转为.net standard)项目. 二. OSS.Social  [

Java小程序---接口中抽象方法的实现(解决了JAVA语言不能多继承的问题)

                                                                      程序作者:刘聪聪 public interface Sing { public static final String eyecolor="black"; public void sleep(); public void sing(); } public interface Print { public static final String se

打卡小程序接口设计流程图

打卡系统基础功能主要功能概述. * 创建打卡计划, * 打卡签到,签到时可以上传图片,语音等数据保存 * 查看打卡记录.查询个人的打卡数据统计(所有打卡计划总次数,所有超时未打卡次数) 根据这些需求,分析后台接口 1. 上传文件接口简要概述流程图 下图主要是实现图片上传接口独立,可以实现多图片上传,返回多个图片上传后返回的图片地址列表 详细实现步骤是 1 设置文件存放路径,按日期 ( 8位长度日期,如20190122 ) 作为相对目录存放文件 2 循环遍历所有上传的文件数组 前置条件过滤,如果非

微信小程序接口调用

1.先调用封装好的方法: var server = require("../.."); 2.调用接口 data: { listdata: {}, }, loadData: function() { let that = this; server.sendRequest({ url: '/.../',  //接口地址 data: { id: 3, //接口参数 }, method: 'POST',  //请求方法 success: function(res) { console.log(

微信小程序接口配置问题

安疫逆战,加油!!! 一.在微信开发者工具中配置 打开微信开发者工具,右上角">>"点击“详情“ 点击”本地设置“ 勾选上”不校验安全域名.TLS 版本以及 HTTPS 证书“ 二.上线配置 打开微信公众平台,侧边栏点击点击“开发“——>"开发设置" 找到下面的服务器域名进行配置 原文地址:https://www.cnblogs.com/yqq520/p/12349526.html