版本支持

该系列接口,支持微信v2v3版本切换。

SDK

$obj = new \wechat\Wechat();
$_this  = $obj->pay()->v2()->payment();

设置回调地址

除了在配置文件中设置默认回调地址外,SDK还支持挑起一键下单时,调用notify_url()方法进行设置。

$obj = new \wechat\Wechat();
// 手动设置回调地址
$_this  = $obj->pay()->v2()->payment()->notify_url('回调地址');

小程序/JSAPI

方法名:jsapi()

参数:

  • string $openid

    • 功能:微信openid
    • 默认值:无
  • float $money

    • 功能:金额(元)
    • 默认值:无
  • string $order_sn

    • 功能:订单号
    • 默认值:无
  • string $body

    • 功能:支付描述
    • 默认值订单支付
  • array $more

    • 功能:一键下单文档更多参数,最后会array_merge()到一起提交
    • 默认值[]

使用示例:

$obj = new \wechat\Wechat();
// 一键下单,同时设置回调地址
$array = $obj->pay()->v2()->payment()->notify_url('https://www.baidu.com')->jsapi('orUXq0MrtQR8UUKU6WsSjJiTA718', 0.01, 'ts000000001');

返回值示例:

array(7) {
  ["appId"] => string(18) "wxa425*****"
  ["timeStamp"] => string(10) "1645616782"
  ["nonceStr"] => string(15) "323011645616782"
  ["signType"] => string(3) "MD5"
  ["package"] => string(46) "prepay_id=wx23194622354633907*****ec0480000"
  ["paySign"] => string(32) "1120ADA580119D7A0*****5B921EF6D9B"
  ["prepay_id"] => string(36) "wx231946223546339*****3474bec0480000"
}

H5

方法名:web()

参数:

  • float $money

    • 功能:金额(元)
    • 默认值:无
  • string $order_sn

    • 功能:订单号
    • 默认值:无
  • string $body

    • 功能:支付描述
    • 默认值订单支付
  • array $more

    • 功能:一键下单文档更多参数,最后会array_merge()到一起提交
    • 默认值[]

使用示例:

$obj = new \wechat\Wechat();
// 一键下单,同时设置回调地址
$array = $obj->pay()->v2()->payment()->notify_url('https://www.baidu.com')->web(0.01, 'ts000000002');

返回值示例:

array(2) {
  ["prepay_id"] => string(36) "wx231947380449***37cff7b0000"
  ["h5_pay_url"] => string(117) "https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx23194738044905cd0dbad9637cff7b0000&package=326350533"
}

App

方法名:app()

参数:

  • float $money

    • 功能:金额(元)
    • 默认值:无
  • string $order_sn

    • 功能:订单号
    • 默认值:无
  • string $body

    • 功能:支付描述
    • 默认值订单支付
  • array $more

    • 功能:一键下单文档更多参数,最后会array_merge()到一起提交
    • 默认值[]

使用示例:

$obj = new \wechat\Wechat();
// 一键下单,同时设置回调地址
$array = $obj->pay()->v2()->payment()->notify_url('https://www.baidu.com')->app(0.01, 'ts000000003');

返回值示例:

array(7) {
  ["prepayid"] => string(36) "wx231953517649***4ce33fca6d70000"
  ["appid"] => string(18) "wxa42***e07fe815"
  ["partnerid"] => string(10) "1519979761"
  ["package"] => string(10) "Sign=WXPay"
  ["noncestr"] => string(15) "109741645617231"
  ["timestamp"] => string(10) "1645617231"
  ["sign"] => string(32) "403CAE63F7A204***131645E3FBAF"
}

付款码(模式一)

方法名:qrcode()

参数:

  • float $money

    • 功能:金额(元)
    • 默认值:无
  • string $order_sn

    • 功能:订单号
    • 默认值:无
  • string $product_id

    • 功能:商品ID
    • 默认值:无
  • array $more

    • 功能:一键下单文档更多参数,最后会array_merge()到一起提交
    • 默认值[]

使用示例:

$obj = new \wechat\Wechat();
// 一键下单,同时设置回调地址
$array = $obj->pay()->v2()->payment()->notify_url('https://www.baidu.com')->qrcode(0.01, 'ts000000004', 1001);

返回值示例:

array(1) {
  ["code_url"] => string(169) "weixin://wxpay/bizpayurl?appid=wxa425*****815&mch_id=15**********61&nonce_str=4825*****17343&product_id=1001&time_stamp=1645617343&sign=4F2ED3B7*****5A09FEBDC"
}

付款码(模式二)

方法名:qrcode2()

参数:

  • float $money

    • 功能:金额(元)
    • 默认值:无
  • string $order_sn

    • 功能:订单号
    • 默认值:无
  • string $body

    • 功能:支付描述
    • 默认值订单支付
  • array $more

    • 功能:一键下单文档更多参数,最后会array_merge()到一起提交
    • 默认值[]

使用示例:

$obj = new \wechat\Wechat();
// 一键下单,同时设置回调地址
$array = $obj->pay()->v2()->payment()->notify_url('https://www.baidu.com')->qrcode2(0.01, 'ts000000005');

返回值示例:

array(2) {
  ["prepay_id"] => string(36) "wx23195740475******d0b7bf03931b90000"
  ["code_url"] => string(37) "weixin://wxpay/bizpayurl?pr=bm18Vwrzz"
}

模式一 短链接转换

用于把付款码模式一的支付地址,转换成短链接,减少二维码的数据量。
方法名:shorturl()

参数:

  • str $url

    • 功能:付款码模式一的支付地址
    • 默认值:无

使用示例:

$Wechat = new \wechat\Wechat();
// 获得SDK实例
$obj = $obj->pay()->v2()->payment();
// 付款码,模式一
$res = $obj->qrcode(0.01, 'ts000000006', 1001);
if (\x\common\Type::array($res) == false) {
	echo $res;
} else {
	// 短链接转换
	$res = $obj->shorturl($res['code_url']);
    if (\x\common\Type::array($res) == false) {
        echo $res;
    } else {
    	var_dump($res);
    }
}

返回值示例:

array(1) {
  ["short_url"] => string(37) "weixin://wxpay/bizpayurl?pr=MA*****W00"
}

关于一键下单返回值

一键下单的所有相关方法,当返回值都为array类型时,表示订单创建成功,失败时返回值为微信MSG内容。

例如,下面的判断方式:

$obj = new \wechat\Wechat();
$res = $obj->pay()->v2()->payment()->jsapi('orUXq0MrtQR8UUKU6WsSjJiTA718', 0.01, 'ts000000001');
// 判断成功
if (\x\common\Type::array($res)) {
	var_dump($res);
} else {
	// 失败
	echo $res;
}

回调验签

方法名:verify()

参数:

  • xml|array $param

    • 功能:支付回调的数据。支持xmlarray格式
    • 默认值:无

使用示例:

$xml = '<xml><appid><![CDATA[wxa4251****e07fe815]]></appid>
<bank_type><![CDATA[OTHERS]]></bank_type>
<cash_fee><![CDATA[1]]></cash_fee>
<fee_type><![CDATA[CNY]]></fee_type>
<is_subscribe><![CDATA[N]]></is_subscribe>
<mch_id><![CDATA[15****1]]></mch_id>
<nonce_str><![CDATA[509561594105736]]></nonce_str>
<openid><![CDATA[orUXq0JX7VWs7Dqi-gGE0x1TfPtg]]></openid>
<out_trade_no><![CDATA[1988********85681]]></out_trade_no>
<result_code><![CDATA[SUCCESS]]></result_code>
<return_code><![CDATA[SUCCESS]]></return_code>
<sign><![CDATA[C14288D0****767137707757D]]></sign>
<time_end><![CDATA[20200707150905]]></time_end>
<total_fee>1</total_fee>
<trade_type><![CDATA[JSAPI]]></trade_type>
<transaction_id><![CDATA[4200000613******226615]]></transaction_id>
</xml>';
$obj = new \wechat\Wechat();
$str = $obj->pay()->v2()->payment()->verify($xml);

返回值示例:

// 校验失败
<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[ERROR]]></return_msg></xml>
// 校验通过
true

提示:当校验不通过时,该方法是直接返回了微信需要抛出的FAILXML字符串,校验通过则返回true

获取回调处理成功时所需的XML

方法名:success()

参数:无

使用示例:

$obj = new \wechat\Wechat();
$str = $obj->pay()->v2()->payment()->success();

返回值示例:

<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>

完整的回调处理示例

$Wechat = new \wechat\Wechat();
// 获得SDK实例
$obj = $obj->pay()->v2()->payment();
// 获得微信回调内容
$param = \x\Request::raw();
// 验签
$vif = $obj->verify($param);
if ($vif === true) {
	// 验签成功,抛出SUCCESS-XML给微信
    return $this->fetch($obj->success());
} else {
	// 验签失败,抛出XML给微信
	return $this->fetch($vif);
}

SW-X

企业级 - 高性能 PHP 框架

最后更新:3年前 . 作者-小黄牛

本篇目录