微信小程序支付 后端PHP(二)

来源:互联网 发布:农业网络信息杂志地址 编辑:程序博客网 时间:2024/06/06 06:38

近期改了下PHP代码:

<?php/** * Created by PhpStorm. * User: UFO * Date: 17/8/21 * Time: 下午3:16 * 参考链接:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_1&index=1 */require_once "WxPay.ConfigPro.php";class WxmPayPro  {     function wx_getPayRequest( $mid, $openid, $orderid, $rmb, $title, $body, $type='1' )    {        $tradeid = $mid.$type;//订单号,这个根据自己需求自定义, mid是支付订单里第三方也就是商户我自己的业务逻辑,不写也可以        $nonce   = $orderid.mt_rand(10000,99999);        $notify  = 'http://'.Plat_Const::getApiHost().'/pay/miniwxpage.php';//回调地址,自己写,支付成功回调,在回调页面进行更改与用户金钱相关的代码        $url     = 'https://api.mch.weixin.qq.com/pay/unifiedorder';        // post data        $now  = time().'';//时间        $appid = Plat_PayFunc::getMiniWxSecret( $millid, 'appid' );//小程序ID 写到一个类里面了 方便后期修改 当然也可以在这里直接写        $mchid = Plat_PayFunc::getMiniWxSecret( $millid, 'mchid' );//商户号         $data = array(            'appid'            => $appid,            'mch_id'           => $mchid,            'spbill_create_ip' => CBase_Ip::getLocalIp(),//终端ip   Y            'nonce_str'        => $nonce,                //随机字符串Y            'openid'           => $openid,               //用户标识 N            'body'             => $title,                //商品描述 Y         // 'detail'           => $body,                 //商品详情 N            'attach'           => $tradeid,              //附加数据 N            'out_trade_no'     => $tradeid,              //商户订单号 Y            'total_fee'        => $rmb,                  //总金额 单位分 int Y            'notify_url'       => $notify,               //通知地址 Y            'trade_type'       => 'JSAPI',        );          $data[ 'sign' ] = self::wx_getPkgSign($millid, $data);        $ret  = Plat_Net::post( $url, self::wx_toXml($data) );//自己写的网络请求类,这里也可以用其他网络请求        $json = self::wx_parseXML( $ret );        if( !$json || !isset($json[ 'prepay_id' ]) )        {            return array( 'ret' => 'fail', 'tip' => $json[ 'return_msg' ] );        }        // prepare for client        $prepayid = $json[ 'prepay_id' ];        $req = array(            'appId'     => $appid,            'timeStamp' => $now,            'nonceStr'  => $nonce,            'package'   => 'prepay_id='.$prepayid,            'signType'  => 'MD5',        );        $req[ 'paySign' ] = self::wx_getPkgSign( $millid, $req );        return json_encode($req);    }    public function wx_getPkgSign( $millid, $req )    {        $pars = '';        ksort( $req );        foreach( $req as $k => $v )        {            if( 'sign' != $k && $v !== '' )            {                $pars .= $k . '=' . $v . '&';            }        }        $mkey = Plat_PayFunc::getMiniWxSecret( $millid, 'key' );        $pars .= 'key='. $mkey;        return strtoupper( md5($pars) );    }    public  function wx_toXML( $data )    {        $xml = '<xml>';        foreach( $data as $key => $val )        {            $xml .= '<' . $key . '><![CDATA[' . $val . ']]></' . $key . '>';        }        $xml .= '</xml>';        return $xml;    }    public  function wx_parseXML( $str )    {        $rsp = array();        $xml = @simplexml_load_string( $str );        if( $xml && $xml->children() )        {            foreach( $xml->children() as $node )            {                if( $node->children() )                {                    $k = $node->getName();                    $nodeXml = $node->asXML();                    $v = substr( $nodeXml, strlen($k)+2, strlen($nodeXml)-2*strlen($k)-5 );                }                else                {                    $k = $node->getName();                    $v = (string)$node;                }                $rsp[ $k ] = $v;            }        }        return $rsp;    }}?>
然后调用:

 $data   = WxmPayPro::wx_getPayRequest( $mid, $openid, $orderid, $prmb, $title, $body, '1' );
 data即为小程序前端支付所需数据



原创粉丝点击