微信app支付 php,PHP 微信APP支付 整合 thinkphp3.2.3

php开发APP支付功能中,涉及到微信APP支付功能。为了考虑数据的严密性,加密的过程全部都需要在服务端进行生成。微信APP支付与支付宝的还不太一样。微信APP支付需要二次的加密请求才可以完成整个服务端的任务。

1、首先第一次需要加密请求拿到prepay_id,就是预支付订单号。

2、接着在拿得到的预支付订单号进行加密,生成最终APP端请求的参数。

3、注意的是,微信开发中请求和发送的结构都是xml。

以下代码直接可以复制,简单修改点参数就可以使用。/*微信签名 by gm 2017-11-02*/

public function wxsignature(){

$body  = I('post.body');  // 描述

$title = I('post.title'); // 标题

$order = I('post.order'); // 订单号

$price = I('post.price'); // 价格

$d['appid'] = $this->wxappid;

$d['mch_id']= $this->wxmch_id;

$d['nonce_str']= \Org\Util\String::randString(20);

$d['body']     = $body;

$d['out_trade_no']= $order;

$d['total_fee']= $price*100;

$d['spbill_create_ip']= get_client_ip();

$d['notify_url']= 'http://www.shuchengxian.com/';

$d['trade_type']= 'APP';

// 获取签名

$d['sign'] = $this->_getwxsign($d);

// 拼装数据

$xml = $this->_setxmldata($d);

// 发送请求

$res = $this->_sendprePaycurl($xml);

if($res['return_code'] == 'SUCCESS'){

// 二次签名

$t['appid'] = $this->wxappid;

$t['noncestr'] = \Org\Util\String::randString(20);

$t['package'] = "Sign=WXPay";

$t['prepayid'] = $res['prepay_id'];

$t['partnerid'] = $this->wxmch_id;

$t['timestamp'] = time();

$t['sign'] = $this->_getsecondsign($t);

$this->ajaxReturn(returncode(array($t),'获取成功',200));

}else{

$this->ajaxReturn(returncode(array(),'获取失败',500));

}

}

//通过curl发送数据给微信接口的函数

private function _sendprePaycurl($xmlData) {

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

$header[] = "Content-type: text/xml";

$curl = curl_init();

curl_setopt($curl, CURLOPT_HTTPHEADER, $header);

curl_setopt($curl, CURLOPT_URL, $url);

curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

curl_setopt($curl, CURLOPT_POST, 1);

curl_setopt($curl, CURLOPT_POSTFIELDS, $xmlData);

$data = curl_exec($curl);

if (curl_errno($curl)) {

print curl_error($curl);

}

curl_close($curl);

return $this->_xmldataparse($data);

}

//xml格式数据解析函数

private function _xmldataparse($data){

$msg = array();

$msg = (array)simplexml_load_string($data, 'SimpleXMLElement', LIBXML_NOCDATA);

return $msg;

}

/* 拼装请求的数据xml 生成xml数据格式 by gm 2017-11-2*/

private function _setxmldata($data) {

$xml = "

";

$data = sprintf($xml, $data['appid'], $data['body'], $data['mch_id'], $data['nonce_str'], $data['notify_url'], $data['out_trade_no'], $data['spbill_create_ip'], $data['total_fee'], $data['trade_type'], $data['sign']);

return $data;

}

/*生成微信签名 by gm 2017-11-02*/

private function _getwxsign($data){

ksort($data);

$str = '';

foreach ($data as $key => $value) {

$str .= !$str ? $key . '=' . $value : '&' . $key . '=' . $value;

}

$str.='&key='.$this->wxkey;

$sign = strtoupper(md5($str));

return $sign;

}

/*获取二次签名 by gm 2017-11-02*/

private function _getsecondsign($data){

$sign = array(

"appid"=>$data['appid'],

"noncestr"=>$data['noncestr'],

"package"=>$data['package'],

"prepayid"=>$data['prepayid'],

"partnerid"=>$data['partnerid'],

"timestamp"=>$data['timestamp'],

);

return $this->_getwxsign($sign);

}

以上就是PHP微信APP支付的整个服务器端的执行代码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值