近期改了下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 = 'https://'.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; } } ?>然后调用: <?php /** * Created by PhpStorm. * Use