namespace wxPay\Controller;

use Think\Controller;

class AjaxpayfunController extends Controller {

function index(){

header('Content-Type:text/html;Charset=utf-8'); //php页面输出 乱码

//参数配置

$appid = '*********'; /*微信开放平台上的应用id*/

$mch_id = '*************'; /*微信申请成功之后邮件中的商户id*/

$api_key = '************************'; /*在微信商户平台上自己设定的api密钥 32位*/

$out_trade_no = $this -> ordersinfo(); /*商户订单号*/

$price = $_GET['total']*1; /*支付金额*/

$price = 0.02*1; /*支付金额*/

$code = $this -> weChatPay($out_trade_no,$price,$appid,$mch_id,$api_key);

echo($code);

}

//入口函数

function weChatPay($order_num,$price,$appid,$mch_id,$api_key){

$json = array();//生成预支付交易单的必选参数:

$newPara = array();//所需各项参数

$newPara["appid"] = $appid; //应用APP appid

$newPara["mch_id"] = $mch_id; //微信支付商户id//设备号

$newPara["device_info"] = $this -> createNoncestr(); //终端设备号(门店号或收银设备ID),如没有这里推荐使用函数生成随机字符串

$newPara["nonce_str"] = $this -> createNoncestr(); //随机字符串,不长于32位。推荐随机数生成算法

$newPara["body"] = "添美爱车"; //商品描述 或应用名称

$newPara["out_trade_no"] = $order_num; //商户订单号,这里是商户自己的内部的订单号

$newPara["total_fee"] = $price*100; //支付金额

$newPara["spbill_create_ip"] = $_SERVER["REMOTE_ADDR"]; //正在浏览当前页面用户的 IP 地址。

$newPara["notify_url"] = "http://**********/wxpay.php/Ajaxpayfun/wxpaynotify_url_sqlsta"; //支付成功后的回调地址注意,这里的url里面不要加参数

$newPara["trade_type"] = "APP"; //交易类型

$key = $api_key;// 密钥:在商户后台个人安全中心设置//第一次签名

$newPara["sign"] = $this -> appgetSign($newPara,$key);

//把数组转化成xml格式

$xmlData = $this -> arrayToXml($newPara);

$get_data = $this -> sendPrePayCurl($xmlData);

//返回的结果进行判断。

if($get_data["return_code"] == "SUCCESS" && $get_data["result_code"] == "SUCCESS"){

//根据微信支付返回的结果进行二次签名

//二次签名所需的随机字符串

$newPara["nonce_str"] = $this -> createNoncestr(); //二次签名所需的时间戳

$newPara["timeStamp"] = time().""; //二次签名剩余参数的补充

$secondSignArray = array(

"appid" =>$newPara["appid"],

"noncestr" =>$newPara["nonce_str"],

"package" =>"Sign=WXPay",

"prepayid" =>$get_data["prepay_id"],

"partnerid" =>$newPara["mch_id"],

"timestamp" =>$newPara["timeStamp"],);

$json["success"] = 1;

$json["ordersn"] = $newPara["out_trade_no"]; //订单号

$json["order_arr"] = $secondSignArray; //返给前台APP的预支付订单信息

$json["order_arr"]["sign"] = $this -> appgetSign($secondSignArray,$key); //预支付订单签名

$json["order_arr"]["out_trade_no"] = $newPara["out_trade_no"]; //商户订单号

$json["data"] = "预支付完成"; //预支付完成,在下方进行自己内部的业务逻辑

return json_encode($json["order_arr"]);

}else{

$json["success"] = 0;

$json["error"] =

$get_data["return_msg"];

return json_encode($json);

}

}

//商品订单号码生成方法可自定义

function ordersinfo(){

$shop = "TIANMEIAIC";

$date = date("YmdHi");

$time = time();

$out_trade_no = $shop.$date.$time;

return $out_trade_no;

}

//将数组转换为xml格式

function arrayToXml($arr){

$xml = "";

foreach ($arr as $key=>$val){

if (is_numeric($val)){

$xml.="".$val."".$key.">";

}else{

$xml.="".$key.">";

}

}

$xml.="";

return $xml;

}

//发送请求

function sendPrePayCurl($xml,$second=30){

$url = "https://api.mch.weixin.qq.com/pay/unifiedorder";

$ch = curl_init();

curl_setopt($ch,CURLOPT_URL, $url);

curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);

curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);//设置header

curl_setopt($ch, CURLOPT_HEADER, FALSE);//果为字符串且输出到屏幕上

curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);//post提交方式

curl_setopt($ch, CURLOPT_POST, TRUE);

curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);//运行curl

$data = curl_exec($ch);

curl_close($ch);

$data_xml_arr =$this -> XMLDataParse($data);

if($data_xml_arr){

return $data_xml_arr;

}else{

$error = curl_errno($ch);

echo"curl出错,错误码:$error"."
";

echo "错误原因查询";

curl_close($ch);

return false;

}

}

//xml格式数据解析函数

function XMLDataParse($data){

$xml = simplexml_load_string($data,NULL,LIBXML_NOCDATA);

$array=json_decode(json_encode($xml),true);

return $array;

}

//随机字符串

function createNoncestr( $length = 32 ){

$chars = "abcdefghijklmnopqrstuvwxyz0123456789";

$str ="";

for($i = 0; $i < $length;$i++){

$str.= substr($chars, mt_rand(0, strlen($chars)-1), 1);

}return $str;

}

/*格式化参数格式化成url参数 生成签名sign*/

function appgetSign($Obj,$appwxpay_key){

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

$Parameters[$k] = $v;

}

//签名步骤一:按字典序排序参数

ksort($Parameters);

$String = $this -> formatBizQueryParaMap($Parameters, false);

//echo "【string1】".$String."";

//签名步骤二:在string后加入KEY

if($appwxpay_key){

$String = $String."&key=".$appwxpay_key;

}

//echo "【string2】".$String."";

//签名步骤三:MD5加密

$String = md5($String);

//echo "【string3】 ".$String."";

//签名步骤四:所有字符转为大写

$result_ = strtoupper($String);

//echo "【result】 ".$result_."";

return $result_;

}

//按字典序排序参数

function formatBizQueryParaMap($paraMap, $urlencode) {

$buff = "";

ksort($paraMap);

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

if($urlencode){

$v = urlencode($v);

}

//$buff .= strtolower($k) . "=" . $v . "&";

$buff .= $k . "=" . $v . "&";}

$reqPar;if (strlen($buff) > 0){

$reqPar = substr($buff, 0, strlen($buff)-1);

}

return $reqPar;

}

//微信支付成功后回调方法

public function wxpaynotify_url_sqlsta(){

$testxml = file_get_contents("php://input");

$jsonxml = json_encode(simplexml_load_string($testxml, 'SimpleXMLElement', LIBXML_NOCDATA));

$result = json_decode($jsonxml, true);//转成数组,

if($result){

//如果成功返回了

$out_trade_no = $result['out_trade_no'];

$transaction_id = $result['transaction_id'];

if($result['return_code'] == 'SUCCESS' && $result['result_code'] == 'SUCCESS'){

//执行业务逻辑改变订单状态等操作

$orderssave = $this -> orderssqlstasave($out_trade_no,$transaction_id);

}

}

}

//数据库订单数据修改方法

public function orderssqlstasave($out_trade_no,$transaction_id){

//查询创建订单表 where("out_trade_no='".$out_trade_no."' and paysta=1")

$where['paysta'] = 1;

$where['out_trade_no'] = $out_trade_no;

$list = M("orders") -> where($where) -> find();

if ($list && $list['transaction_id'] == '') {

$data['id'] = $list['id'];

$data['transaction_id'] = $transaction_id;

//查询出来有该订单 就改变状态

$save = M("orders") -> save($data);

if ($save) {

return $save;

}

}

}

}

微信支付服务器端php,APP微信支付php服务端函数方法相关推荐

  1. 送餐app+php,订餐APP源码Food Delivery App v2.1(客户端+服务端)

    android订餐APP源码Food Delivery App v2.1(客户端+服务端),包含android客户端源码.php+mysql服务端源码. Version 2.1 Food Delive ...

  2. 游戏交流社区BBS论坛APP客户端和网页服务端设计 毕业论文+前后端源码及数据库文件

    下载地址:https://download.csdn.net/download/m0_63680064/36065411 项目介绍: 游戏交流社区BBS论坛APP客户端和网页服务端设计 毕业论文+前后 ...

  3. 微信支付:app端提示微信签名失败,errCode=-2;后台服务端返回成功

    1.微信有两个平台:一个开放平台一个商户平台 看开放平台V2版文档: 注意给微信传参的参数要小写: app端配置开放平台的签名 最好是打包正式版后获取的签名: 后台服务端有两次验签的过程,一定要第一次 ...

  4. 【APP支付】关于APP支付宝支付那些事

    昨天整理了关于APP微信支付的东西,今天在整理代码之后,来谈谈支付宝的APP支付. 两者有很大相似之处,也有区别,只要理解了一个,另一个就很好理解了,如果是第一次做服务端的支付的话,建议先看看上面那篇 ...

  5. openid java_微信小程序调用微信登陆获取openid及java做为服务端示例

    一.微信小程序 第一步:调用 wx.login获取code 文档地址 第二步:判断用户是否授权读取用户信息 文档地址 第三步:调用wx.getUserInfo读取用户数据 文档地址 第四步:由于小程序 ...

  6. 微信小程序获取用户信息(含服务端)

    本文获取用户信息方式需要服务端配合,纯前端的可查看 微信小程序获取用户信息(纯前端) 若需获取 openid 和用户信息,可使用 wx.getUserInfo() 获取加密后的信息,传给服务端后解密. ...

  7. app消息推送服务器端,系统服务:APP消息推送服务

    APP消息推送服务开通方法 在云表官网-管理控制台中,选择要开通APP消息推送服务的服务器,然后选择要开通APP消息推送服务的应用空间,点击对应应用空间的"应用空间管理". 在进入 ...

  8. 如何用php向wsdl服务器发请求,知道服务器端Wsdl,不写服务端代码,仅写客户端代码能调用服务端的方法吗?...

    新手请教,望高手朋友不吝赐教,无比感谢中. 今天一大早开始研究Webservice,有一本不太专业的参考书,随便找了一个服务端的Wsdl,想调用其中的方法,结果搞了一天,无果,老报错,郁闷. 代码如下 ...

  9. android 快传 源码_最新安卓仿茄子快传APP源码包括服务端源码Android开发快传类项目源码全套...

    适使用范围:  安卓APP茄子快传源码 Android项目源码相似茄子快传的快传项目包括服务端 运行环境:  Android app 源码详细: 本项目是一个基于安卓的相似茄子快传的项目源码,包括安卓 ...

最新文章

  1. redis学习笔记---redis的哨兵Sentinel
  2. R创建分类变量(categorical variable)
  3. gitzip没有作用以及github如何下载单个文件或目录
  4. ITTC数据挖掘平台介绍(四) 框架改进和新功能
  5. Python的基本运算符
  6. python 调用摄像头拍照_《自拍教程67》Python调用摄像头, 拍照拍照!
  7. 梯度下降法Gradient Descent深度学习 机器学习
  8. linux more 下一页_Linux学习笔记
  9. 重写系统中的UINavigationController返回按钮的事件
  10. 从一道面试题谈linux下fork的运行机制
  11. Selenium常用API的使用java语言之13-多表单切换
  12. poj 1083 Moving Tables
  13. 胖球为李佳琦做数据?官方回应:系不实信息 已提出了投诉举报
  14. EXSi5.5安装篇
  15. Easy make - emake
  16. swiper5 点击图换下一张_软网推荐:骗倒社交好友 制作另类隐藏图
  17. python中三角函数计算
  18. 运放放大倍数计算公式_运放选型速记指南
  19. [杂谈]亿元大奖为何总落陌生客
  20. 操作系统实验一:线程的创建与撤销

热门文章

  1. mysql 1033 frm_修复mysqldump Incorrect information in file frm (1033)
  2. 【Nginx 快速入门】反向代理、负载均衡、动静分离
  3. 部署高校房屋管理系统可以实现哪些目标?
  4. Java Grammar:数据类型
  5. 非常喜欢的一期《晓松奇谈》
  6. win10资源管理器——删除左侧图标(自用)
  7. Bootstrap4从入门到精通
  8. 【剑指 Offe】剑指 Offer 17. 打印从1到最大的n位数
  9. Matrix Derivation
  10. 阿里巴巴编码规范认证