匿名通过本文主要向大家介绍了php,微信,微信支付等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
H5支付时出现“签名错误”怎么办?注意调用微信“统一下单”接口后返回pre_pay_id后,需要用户再次进行签名返回给HTML; “支付目录没有授权”,进入微信商家管理后台设置即可。
一、Model层,Wxpay.php
<?php
namespace app\common\model;
class Wxpay
{
private $appid = 'wxe8*****d4'; //微信公众号appid
private $secret = '37c4*******5f0'; //微信公众号appsecret
private $mchid = '13******02'; //商家号
private $key = '5363e******49e8'; //支付密钥
private $sslcert_path = 'apiclient_cert.pem'; //证书所在绝对路径
private $sslkey_path = 'apiclient_key.pem'; //证书所在绝对路径
public function __construct($appid = '', $secret = '', $mchid = '', $key = '')
{
if(!empty($appid)) $this->appid = $appid;
if(!empty($secret)) $this->secret = $secret;
if(!empty($mchid)) $this->mchid = $mchid;
if(!empty($key)) $this->key= $key;
}
/*
* 微信内H5调起支付
* @params string $openid : 微信用户openid
* @params string $out_trade_no : 商家生成的订单号(唯一性)
* @params int $total_fee : 支付金额,单位分
* return array $ret : 返回支付时所需要的数据
* */
public function payForWeixin($openid,$out_trade_no,$total_fee,$attach='微信支付',$body='微信支付')
{
//支付数据
$data['openid'] = $openid;
$data['out_trade_no'] = $out_trade_no;
$data['total_fee'] = $total_fee*100;
$data['spbill_create_ip'] = $_SERVER["REMOTE_ADDR"];
$data['attach'] = $attach;
$data['body'] = $body;
$data['appid'] = $this->appid;
$data['mch_id'] = $this->mchid;
$data['nonce_str'] = random(12);
$data['trade_type'] = "JSAPI";
$data['notify_url'] = "http://****.com/home/wxpaynofiy/notify.html";
$sign = $this->getParam($data);
$dataXML = "<xml>
<appid>".$data['appid']."</appid>
<attach>".$data['attach']."</attach>
<body>".$data['body']."</body>
<mch_id>".$data['mch_id']."</mch_id>
<nonce_str>".$data['nonce_str']."</nonce_str>
<notify_url>".$data['notify_url']."</notify_url>
<openid>".$data['openid']."</openid>
<out_trade_no>".$data['out_trade_no']."</out_trade_no>
<spbill_create_ip>".$data['spbill_create_ip']."</spbill_create_ip>
<total_fee>".$data['total_fee']."</total_fee>
<trade_type>".$data['trade_type']."</trade_type>
<sign>".$sign."</sign>
</xml>";
$url = 'https://api.mch.weixin.qq.com/pay/unifiedorder';
$result = $this->https_post($url,$dataXML);
$ret = $this->xmlToArray($result);
if($ret['return_code'] == 'SUCCESS' && $ret['return_msg'] == 'OK') {
return array(
'appId' => $this->appid,
'timeStamp' => time(),
'nonceStr' => $data['nonce_str'],
'package' => 'prepay_id='.$ret['prepay_id'],
'signType' => 'MD5',
'paySign' => $sign
);
} else {
$this->errorLog("微信支付失败,",$ret);
return null;
}
}
/*
* 微信二维码支付
* @params string $openid : 用户的openid
* @params string $out_trade_no : 商户订单号
* @params number $total_fee : 订单金额,单位分
* return string $code_url : 二维码URL链接
*/
public function payForQrcode($out_trade_no,$total_fee,$body="魔盒CMS",$attach="微信支付")
{
//支付数据
$data['out_trade_no'] = $out_trade_no;
$data['total_fee'] = $total_fee*100;
$data['spbill_create_ip'] = $_SERVER["REMOTE_ADDR"];
$data['attach'] = $attach;
$data['body'] = $body;
$data['appid'] = $this->appid;
$data['mch_id'] = $this->mchid;
$data['nonce_str'] = random(12);
$data['trade_type'] = "NATIVE";
$data['notify_url'] = "http://****.com/home/wxpaynofiy/notify.html";
$sign = $this->getParam($data);
$dataXML = "<xml>
<appid>".$data['appid']."</appid>
<attach>".$data['attach']."</attach>
<body>".$data['body']."</body>
<mch_id>".$data['mch_id']."</mch_id>
<nonce_str>".$data['nonce_str']."</nonce_str>
<notify_url>".$data['notify_url']."</notify_url>
<out_trade_no>".$data['out_trade_no']."</out_trade_no>
<spbill_create_ip>".$data['spbill_create_ip']."</spbill_create_ip>
<total_fee>".$data['total_fee']."</total_fee>
<trade_type>".$data['trade_type']."</trade_type>
<sign>".$sign."</sign>
</xml>";
$url = 'https://api.mch.weixin.qq.com/pay/unifiedorder';
$result = $this->https_post($url,$dataXML);
$ret = $this->xmlToArray($result);
if($ret['return_code'] == 'SUCCESS' && $ret['return_msg'] == 'OK') {
return $ret['code_url'];
} else {
$this->errorLog("获取微信支付二维码失败,",$ret);
return null;
}
}
/*
* 订单查询
* @params string $transaction_id : 微信订单号
* @params string $out_trade_no : 商家订单号(与微信订单号二选一)
* */
public function findOrder($out_trade_no)
{
$data['appid'] = $this->appid;
$data['mch_id'] = $this->mchid;
$data['nonce_str'] = random(12);
$data['out_trade_no'] = $out_trade_no;
$sign = $this->getParam($data);
$dataXML = "<xml>
<appid>".$data['appid']."</appid>
<mch_id>".$data['mch_id']."</mch_id>
<nonce_str>".$data['nonce_str']."</nonce_str>
<out_trade_no>".$data['out_trade_no']."</out_trade_no>
<sign>".$sign."</sign>
</xml>";
$url = 'https://api.mch.weixin.qq.com/pay/orderquery';
$result = $this->https_post($url,$dataXML);
$ret = $this->xmlToArray($result);
if($ret['return_code'] == 'SUCCESS' && $ret['return_msg'] == 'OK') {
return $ret;
} else {
$this->errorLog("查询微信支付订单失败,",$ret);
return null;
}
}
/*
* 退款订单查询
* @params stri

