1. 程式人生 > >微信小程式支付 後端PHP(二)

微信小程式支付 後端PHP(二)

近期改了下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即為小程式前端支付所需資料