本文实例讲述了PHP微信支付功能。分享给大家供大家参考,具体如下:
微信开发SDK:文中用的是php_sdk_v3.0.9 :https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
import( "wxpay.lib.AppPay#Config" , EXTEND_PATH, ".php" );
import( "wxpay.lib.WxPay#Api" , EXTEND_PATH, ".php" );
//$this->weixinpay();
$config = new \AppPayConfig();
//订单号
$appId = $config ->GetAppId();
$key = $config ->GetKey();
$money = 0.01 * 100;
$orderSn = 'M201810241754107557' ; //订单号;
$curTime = time();
$input = new \WxPayUnifiedOrder();
$input ->SetBody( "用户红包" );
$input ->SetOut_trade_no( $orderSn );
$input ->SetTotal_fee( $money );
$input ->SetTrade_type( "APP" );
$unifiedOrder = \WxPayApi::unifiedOrder( $config , $input );
if ( $unifiedOrder [ 'result_code' ] == 'SUCCESS' && $unifiedOrder [ 'return_code' ] == 'SUCCESS' ) {
/*$unifiedOrder 组成:
* ["appid"] => string(18) "wx2xxxx49"
["mch_id"] => string(10) "1xxxxxx01"
["nonce_str"] => string(16) "1GnEUXTuTcFtJVtb"
["prepay_id"] => string(36) "wx241933xxx68fa24ece70611692955"
["result_code"] => string(7) "SUCCESS"
["return_code"] => string(7) "SUCCESS"
["return_msg"] => string(2) "OK"
["sign"] => string(32) "7903xxxxx4710E460CB156"
["trade_type"] => string(3) "APP"*/
$curTime = time();
// 第一部分
$wxpayResult = new \WxPayResults();
$wxpayResult ->SetData( 'appid' , $unifiedOrder [ 'appid' ]);
$wxpayResult ->SetData( 'partnerid' , $unifiedOrder [ 'mch_id' ]);
$wxpayResult ->SetData( 'prepayid' , $unifiedOrder [ 'prepay_id' ]);
$wxpayResult ->SetData( 'noncestr' , $unifiedOrder [ 'nonce_str' ]);
$wxpayResult ->SetData( 'timestamp' , $curTime );
$wxpayResult ->SetData( 'package' , "Sign=WXPay" );
$wxpayResult ->SetData( 'sign' , "" );
$wxpayResult ->SetSign( $config );
$data = $wxpayResult ->GetValues();
// 第二部分
$data [ 'appid' ] = $unifiedOrder [ 'appid' ];
$data [ 'partnerid' ] = $unifiedOrder [ 'mch_id' ];
$data [ 'prepayid' ] = $unifiedOrder [ 'prepay_id' ];
$data [ 'noncestr' ] = $unifiedOrder [ 'nonce_str' ];;
$data [ 'timestamp' ] = $curTime ;
$data [ 'package' ] = "Sign=WXPay" ;
$data [ 'sign' ] = $this ->wxappPaySign( $key , $data ); //$unifiedOrder['sign'];//签名,具体签名方案参见微信公众号支付帮助文档;
$this ->returnSuccess( $data );
} else {
Log::write(var_export( $unifiedOrder , true));
$this ->returnError(300, '微信支付失败' );
}
private function wxappPaySign( $key , $parameters )
{
$sign = md5(sprintf( "appid=%s&noncestr=%s&package=%s&partnerid=%s&prepayid=%s×tamp=%s&key=%s" ,
$parameters [ 'appid' ],
$parameters [ 'noncestr' ],
$parameters [ 'package' ],
$parameters [ 'partnerid' ],
$parameters [ 'prepayid' ],
$parameters [ 'timestamp' ],
$key ));
return strtoupper ( $sign );
}
|
第一部分和第二部分功能是相同的。
希望本文所述对大家PHP程序设计有所帮助。