设为首页 加入收藏

TOP

PHP接口微信支付(一)
2023-07-23 13:27:23 】 浏览:138
Tags:PHP 支付
PHP后台调用微信支付下单
function wx_getPayRequest($openid, $orderid, $rmb, $title,$appoids)
{
$nonce = $orderid.mt_rand(10000,99999);
$orderid=$orderid.'_'.$nonce;//str_replace(",","_",$appoids);
//Log::write('\n ================'.$orderid,'notice');
$srct='0x'.md5(config('app.environment')['paykey'].$orderid);
$notify = '';//回调地址,自己写,支付成功回调,在回调页面进行更改与用户金钱相关的代码
$url= 'https://api.mch.weixin.qq.com/pay/unifiedorder';//统一接口prepay_id
// post data
$now = time().'';//时间
$appid ='';//小程序ID 写到一个类里面了 方便后期修改 当然也可以在这里直接写
$mchid ='';//商户号
// Log::write('\n $mchid================'.json_encode($mchid),'notice');
// Log::write('\n $appid================'.json_encode($appid),'notice');
$data = array(
'appid' => $appid,
'mch_id' => $mchid,
'spbill_create_ip' => '127.0.0.1',//终端ip Y
'nonce_str' => $nonce, //随机字符串Y
'openid' => $openid, //用户标识 N
'body' => $title, //商品描述 Y
// 'detail' => $body, //商品详情 N
'attach' => $appoids, //附加数据 N
'out_trade_no' => $orderid, //商户订单号 Y
'total_fee' => $rmb, //总金额 单位分 int Y
'notify_url' => $notify, //通知地址 Y
'trade_type' => 'JSAPI',
);

$data[ 'sign' ] = self::MakeSign($data);
//echo $data[ 'sign' ];
// Log::write('\n sign================'.json_encode($data[ 'sign' ]),'notice');

$xml=self::wx_toXML($data);
$ret = $this->http_request($url,$xml);
$json = self::wx_parseXML( $ret );
//Log::write('\n ================'.json_encode($json),'notice');
if( !$json || !isset($json[ 'prepay_id' ]) )
{
return array( 'payCode'=>1,'ret' => 'fail', 'tip' => $json[ 'return_msg' ] );
}

$prepayid = $json[ 'prepay_id' ];
$req = array(
'appId' => $appid,
'timeStamp' => $now,
'nonceStr' => $nonce,
'package' => 'prepay_id='.$prepayid,
'signType' => 'MD5',
);
$req[ 'paySign' ] = self::wx_getPkgSign($req);
//$req[ 'notify' ] = $notify;
return $req;
}

///作用:格式化参数,签名过程需要使用
private function formatBizQueryParaMap($paraMap, $urlencode) {
$buff = "";
ksort($paraMap);
foreach ($paraMap as $k => $v) {
if ($urlencode) {
$v = urlencode($v);
}
$buff .= $k . "=" . $v . "&";
}
$reqPar;
if (strlen($buff) > 0) {
$reqPar = substr($buff, 0, strlen($buff) - 1);
}
return $reqPar;
}


public function wx_getPkgSign($req )
{
foreach ($req as $k => $v) {
$Parameters[$k] = $v;
}
//签名步骤一:按字典序排序参数
ksort($Parameters);
$String = $this->formatBizQueryParaMap($Parameters, false);
//签名步骤二:在string后加入KEY
$String = $String . "&key=" . config('app.environment')['paykey'];
//签名步骤三:MD5加密
$String = md5($String);
//签名步骤四:所有字符转为大写
$result_ = strtoupper($String);
return $result_;
}

public function wx_toXML( $data )
{
$xml = '<xml>';
foreach( $data as $key => $val )
{
$xml .= '<' . $key . '><![CDATA[' . $val . ']]></' . $key . '>';
}
$xml .= '</xml>';
return $xml;
}

/**
* 输出xml字符
* @param $data
* @return string
*/
public function ToXml($data)
{
if(!is_array($data)
|| count($data) <= 0)
{
throw new WxPayException("数组数据异常!");
}

$xml = "<xml>";
foreach ($data as $key=>$val)
{
if (is_numeric($val)){
$xml.="<".$key.">".$val."</".$key.">";
}else{
$xml.="<".$key."><![CDATA[".$val."]]></".$key.">";
}
}
$xml.="</xml>";
return $xml;
}

/**
* 格
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇多商户商城系统功能拆解27讲-平台.. 下一篇多商户商城系统功能拆解29讲-平台..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目