本文为大家分享了PHP微信支付实例,包括PHP微信支付源码,PHP微信退款源码,php微信支付接口,供大家参考,具体内容如下
1.JSapi支付demo(在微信客户端中点击)
?
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
65
66
67
|
<?php
/**
* JS_API支付demo
* ====================================================
* 在微信浏览器里面打开H5网页中执行JS调起支付。接口输入输出数据格式为JSON。
* 成功调起支付需要三个步骤:
* 步骤1:网页授权获取用户openid
* 步骤2:使用统一支付接口,获取prepay_id
* 步骤3:使用jsapi调起支付
*/
include_once ( "../WxPayPubHelper/WxPayPubHelper.php" );
//使用jsapi接口
$jsApi = new JsApi_pub();
//=========步骤1:网页授权获取用户openid============
//通过code获得openid
if (!isset( $_GET [ 'code' ]))
{
//触发微信返回code码
$url = $jsApi ->createOauthUrlForCode(WxPayConf_pub::JS_API_CALL_URL);
Header( "Location: $url" );
} else
{
//获取code码,以获取openid
$code = $_GET [ 'code' ];
$jsApi ->setCode( $code );
$openid = $jsApi ->getOpenId();
}
//=========步骤2:使用统一支付接口,获取prepay_id============
//使用统一支付接口
$unifiedOrder = new UnifiedOrder_pub();
//设置统一支付接口参数
//设置必填参数
//appid已填,商户无需重复填写
//mch_id已填,商户无需重复填写
//noncestr已填,商户无需重复填写
//spbill_create_ip已填,商户无需重复填写
//sign已填,商户无需重复填写
$unifiedOrder ->setParameter( "openid" , "$openid" ); //商品描述
$unifiedOrder ->setParameter( "body" , "贡献一分钱" ); //商品描述
//自定义订单号,此处仅作举例
$timeStamp = time();
$out_trade_no = WxPayConf_pub::APPID. "$timeStamp" ;
$unifiedOrder ->setParameter( "out_trade_no" , "$out_trade_no" ); //商户订单号
$unifiedOrder ->setParameter( "total_fee" , "1" ); //总金额
$unifiedOrder ->setParameter( "notify_url" ,WxPayConf_pub::NOTIFY_URL); //通知地址
$unifiedOrder ->setParameter( "trade_type" , "JSAPI" ); //交易类型
//非必填参数,商户可根据实际情况选填
//$unifiedOrder->setParameter("sub_mch_id","XXXX");//子商户号
//$unifiedOrder->setParameter("device_info","XXXX");//设备号
//$unifiedOrder->setParameter("attach","XXXX");//附加数据
//$unifiedOrder->setParameter("time_start","XXXX");//交易起始时间
//$unifiedOrder->setParameter("time_expire","XXXX");//交易结束时间
//$unifiedOrder->setParameter("goods_tag","XXXX");//商品标记
//$unifiedOrder->setParameter("openid","XXXX");//用户标识
//$unifiedOrder->setParameter("product_id","XXXX");//商品ID
$prepay_id = $unifiedOrder ->getPrepayId();
//=========步骤3:使用jsapi调起支付============
$jsApi ->setPrepayId( $prepay_id );
$jsApiParameters = $jsApi ->getParameters();
//echo $jsApiParameters;
?>
|
2.native支付模式一demo(用微信扫的静态链接二维码)
?
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
|
<?php
/**
* Native(原生)支付模式一demo
* ====================================================
* 模式一:商户按固定格式生成链接二维码,用户扫码后调微信
* 会将productid和用户openid发送到商户设置的链接上,商户收到
* 请求生成订单,调用统一支付接口下单提交到微信,微信会返回
* 给商户prepayid。
* 本例程对应的二维码由native_call_qrcode.php生成;
* 本例程对应的响应服务为native_call.php;
* 需要两者配合使用。
*/
include_once ( "../WxPayPubHelper/WxPayPubHelper.php" );
//设置静态链接
$nativeLink = new NativeLink_pub();
//设置静态链接参数
//设置必填参数
//appid已填,商户无需重复填写
//mch_id已填,商户无需重复填写
//noncestr已填,商户无需重复填写
//time_stamp已填,商户无需重复填写
//sign已填,商户无需重复填写
$product_id = WxPayConf_pub::APPID. "static" ; //自定义商品id
$nativeLink ->setParameter( "product_id" , "$product_id" ); //商品id
//获取链接
$product_url = $nativeLink ->getUrl();
//使用短链接转换接口
$shortUrl = new ShortUrl_pub();
//设置必填参数
//appid已填,商户无需重复填写
//mch_id已填,商户无需重复填写
//noncestr已填,商户无需重复填写
//sign已填,商户无需重复填写
$shortUrl ->setParameter( "long_url" , "$product_url" ); //URL链接
//获取短链接
$codeUrl = $shortUrl ->getShortUrl();
?>
|
3.native支付模式二demo(用微信扫的动态链接二维码)
?
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
|
<?php
/**
* Native(原生)支付-模式二-demo
* ====================================================
* 商户生成订单,先调用统一支付接口获取到code_url,
* 此URL直接生成二维码,用户扫码后调起支付。
*
*/
include_once ( "../WxPayPubHelper/WxPayPubHelper.php" );
//使用统一支付接口
$unifiedOrder = new UnifiedOrder_pub();
//设置统一支付接口参数
//设置必填参数
//appid已填,商户无需重复填写
//mch_id已填,商户无需重复填写
//noncestr已填,商户无需重复填写
//spbill_create_ip已填,商户无需重复填写
//sign已填,商户无需重复填写
$unifiedOrder ->setParameter( "body" , "贡献一分钱" ); //商品描述
//自定义订单号,此处仅作举例
$timeStamp = time();
$out_trade_no = WxPayConf_pub::APPID. "$timeStamp" ;
$unifiedOrder ->setParameter( "out_trade_no" , "$out_trade_no" ); //商户订单号
$unifiedOrder ->setParameter( "total_fee" , "1" ); //总金额
$unifiedOrder ->setParameter( "notify_url" ,WxPayConf_pub::NOTIFY_URL); //通知地址
$unifiedOrder ->setParameter( "trade_type" , "NATIVE" ); //交易类型
//非必填参数,商户可根据实际情况选填
//$unifiedOrder->setParameter("sub_mch_id","XXXX");//子商户号
//$unifiedOrder->setParameter("device_info","XXXX");//设备号
//$unifiedOrder->setParameter("attach","XXXX");//附加数据
//$unifiedOrder->setParameter("time_start","XXXX");//交易起始时间
//$unifiedOrder->setParameter("time_expire","XXXX");//交易结束时间
//$unifiedOrder->setParameter("goods_tag","XXXX");//商品标记
//$unifiedOrder->setParameter("openid","XXXX");//用户标识
//$unifiedOrder->setParameter("product_id","XXXX");//商品ID
//获取统一支付接口结果
$unifiedOrderResult = $unifiedOrder ->getResult();
//商户根据实际情况设置相应的处理流程
if ( $unifiedOrderResult [ "return_code" ] == "FAIL" )
{
//商户自行增加处理流程
echo "通信出错:" . $unifiedOrderResult [ 'return_msg' ]. "<br>" ;
}
elseif ( $unifiedOrderResult [ "result_code" ] == "FAIL" )
{
//商户自行增加处理流程
echo "错误代码:" . $unifiedOrderResult [ 'err_code' ]. "<br>" ;
echo "错误代码描述:" . $unifiedOrderResult [ 'err_code_des' ]. "<br>" ;
}
elseif ( $unifiedOrderResult [ "code_url" ] != NULL)
{
//从统一支付接口获取到code_url
$code_url = $unifiedOrderResult [ "code_url" ];
//商户自行增加处理流程
//......
}
?>
|
4.支付查询接口demo
?
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
|
<?php
/**
* 订单查询-demo
* ====================================================
* 该接口提供所有微信支付订单的查询。
* 当支付通知处理异常或丢失的情况,商户可以通过该接口查询订单支付状态。
*
*/
include_once ( "../WxPayPubHelper/WxPayPubHelper.php" );
//退款的订单号
if (!isset( $_POST [ "out_trade_no" ]))
{
$out_trade_no = " " ;
} else {
$out_trade_no = $_POST [ "out_trade_no" ];
//使用订单查询接口
$orderQuery = new OrderQuery_pub();
//设置必填参数
//appid已填,商户无需重复填写
//mch_id已填,商户无需重复填写
//noncestr已填,商户无需重复填写
//sign已填,商户无需重复填写
$orderQuery ->setParameter( "out_trade_no" , "$out_trade_no" ); //商户订单号
//非必填参数,商户可根据实际情况选填
//$orderQuery->setParameter("sub_mch_id","XXXX");//子商户号
//$orderQuery->setParameter("transaction_id","XXXX");//微信订单号
//获取订单查询结果
$orderQueryResult = $orderQuery ->getResult();
//商户根据实际情况设置相应的处理流程,此处仅作举例
if ( $orderQueryResult [ "return_code" ] == "FAIL" ) {
echo "通信出错:" . $orderQueryResult [ 'return_msg' ]. "<br>" ;
}
elseif ( $orderQueryResult [ "result_code" ] == "FAIL" ){
echo "错误代码:" . $orderQueryResult [ 'err_code' ]. "<br>" ;
echo "错误代码描述:" . $orderQueryResult [ 'err_code_des' ]. "<br>" ;
}
else {
echo "交易状态:" . $orderQueryResult [ 'trade_state' ]. "<br>" ;
echo "设备号:" . $orderQueryResult [ 'device_info' ]. "<br>" ;
echo "用户标识:" . $orderQueryResult [ 'openid' ]. "<br>" ;
echo "是否关注公众账号:" . $orderQueryResult [ 'is_subscribe' ]. "<br>" ;
echo "交易类型:" . $orderQueryResult [ 'trade_type' ]. "<br>" ;
echo "付款银行:" . $orderQueryResult [ 'bank_type' ]. "<br>" ;
echo "总金额:" . $orderQueryResult [ 'total_fee' ]. "<br>" ;
echo "现金券金额:" . $orderQueryResult [ 'coupon_fee' ]. "<br>" ;
echo "货币种类:" . $orderQueryResult [ 'fee_type' ]. "<br>" ;
echo "微信支付订单号:" . $orderQueryResult [ 'transaction_id' ]. "<br>" ;
echo "商户订单号:" . $orderQueryResult [ 'out_trade_no' ]. "<br>" ;
echo "商家数据包:" . $orderQueryResult [ 'attach' ]. "<br>" ;
echo "支付完成时间:" . $orderQueryResult [ 'time_end' ]. "<br>" ;
}
}
//商户自行增加处理流程
//......
?>
|
5.对账单接口demo
?
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
|
<?php
/**
* 对账单接口demo
* ====================================================
* 商户可以通过该接口下载历史交易清单。
*/
include_once ( "../WxPayPubHelper/WxPayPubHelper.php" );
//对账单日期
if (!isset( $_POST [ "bill_date" ])){
$bill_date = "20140814" ;
}
else {
$bill_date = $_POST [ "bill_date" ];
//使用对账单接口
$downloadBill = new DownloadBill_pub();
//设置对账单接口参数
//设置必填参数
//appid已填,商户无需重复填写
//mch_id已填,商户无需重复填写
//noncestr已填,商户无需重复填写
//sign已填,商户无需重复填写
$downloadBill ->setParameter( "bill_date" , "$bill_date" ); //对账单日期
$downloadBill ->setParameter( "bill_type" , "ALL" ); //账单类型
//非必填参数,商户可根据实际情况选填
//$downloadBill->setParameter("device_info","XXXX");//设备号
//对账单接口结果
$downloadBillResult = $downloadBill ->getResult();
echo $downloadBillResult [ 'return_code' ];
if ( $downloadBillResult [ 'return_code' ] == "FAIL" ) {
echo "通信出错:" . $downloadBillResult [ 'return_msg' ];
} else {
print_r( '<pre>' );
echo "【对账单详情】" . "</br>" ;
print_r( $downloadBill ->response);
print_r( '</pre>' );
}
}
?>
|
6.退款接口demo
?
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
65
66
67
68
69
|
<?php
/**
* 退款申请接口-demo
* ====================================================
* 注意:同一笔单的部分退款需要设置相同的订单号和不同的
* out_refund_no。一笔退款失败后重新提交,要采用原来的
* out_refund_no。总退款金额不能超过用户实际支付金额(现
* 金券金额不能退款)。
*/
include_once ( "../WxPayPubHelper/WxPayPubHelper.php" );
//输入需退款的订单号
if (!isset( $_POST [ "out_trade_no" ]) || !isset( $_POST [ "refund_fee" ]))
{
$out_trade_no = " " ;
$refund_fee = "1" ;
} else {
$out_trade_no = $_POST [ "out_trade_no" ];
$refund_fee = $_POST [ "refund_fee" ];
//商户退款单号,商户自定义,此处仅作举例
$out_refund_no = "$out_trade_no" . "$time_stamp" ;
//总金额需与订单号out_trade_no对应,demo中的所有订单的总金额为1分
$total_fee = "1" ;
//使用退款接口
$refund = new Refund_pub();
//设置必填参数
//appid已填,商户无需重复填写
//mch_id已填,商户无需重复填写
//noncestr已填,商户无需重复填写
//sign已填,商户无需重复填写
$refund ->setParameter( "out_trade_no" , "$out_trade_no" ); //商户订单号
$refund ->setParameter( "out_refund_no" , "$out_refund_no" ); //商户退款单号
$refund ->setParameter( "total_fee" , "$total_fee" ); //总金额
$refund ->setParameter( "refund_fee" , "$refund_fee" ); //退款金额
$refund ->setParameter( "op_user_id" ,WxPayConf_pub::MCHID); //操作员
//非必填参数,商户可根据实际情况选填
//$refund->setParameter("sub_mch_id","XXXX");//子商户号
//$refund->setParameter("device_info","XXXX");//设备号
//$refund->setParameter("transaction_id","XXXX");//微信订单号
//调用结果
$refundResult = $refund ->getResult();
//商户根据实际情况设置相应的处理流程,此处仅作举例
if ( $refundResult [ "return_code" ] == "FAIL" ) {
echo "通信出错:" . $refundResult [ 'return_msg' ]. "<br>" ;
}
else {
echo "业务结果:" . $refundResult [ 'result_code' ]. "<br>" ;
echo "错误代码:" . $refundResult [ 'err_code' ]. "<br>" ;
echo "错误代码描述:" . $refundResult [ 'err_code_des' ]. "<br>" ;
echo "公众账号ID:" . $refundResult [ 'appid' ]. "<br>" ;
echo "商户号:" . $refundResult [ 'mch_id' ]. "<br>" ;
echo "子商户号:" . $refundResult [ 'sub_mch_id' ]. "<br>" ;
echo "设备号:" . $refundResult [ 'device_info' ]. "<br>" ;
echo "签名:" . $refundResult [ 'sign' ]. "<br>" ;
echo "微信订单号:" . $refundResult [ 'transaction_id' ]. "<br>" ;
echo "商户订单号:" . $refundResult [ 'out_trade_no' ]. "<br>" ;
echo "商户退款单号:" . $refundResult [ 'out_refund_no' ]. "<br>" ;
echo "微信退款单号:" . $refundResult [ 'refund_idrefund_id' ]. "<br>" ;
echo "退款渠道:" . $refundResult [ 'refund_channel' ]. "<br>" ;
echo "退款金额:" . $refundResult [ 'refund_fee' ]. "<br>" ;
echo "现金券退款金额:" . $refundResult [ 'coupon_refund_fee' ]. "<br>" ;
}
}
?>
|
7.退款查询接口demo
?
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
|
<?php
/**
* 退款申请接口-demo
* ====================================================
*
*
*/
include_once ( "../WxPayPubHelper/WxPayPubHelper.php" );
//要查询的订单号
if (!isset( $_POST [ "out_trade_no" ]))
{
$out_trade_no = " " ;
} else {
$out_trade_no = $_POST [ "out_trade_no" ];
//使用退款查询接口
$refundQuery = new RefundQuery_pub();
//设置必填参数
//appid已填,商户无需重复填写
//mch_id已填,商户无需重复填写
//noncestr已填,商户无需重复填写
//sign已填,商户无需重复填写
$refundQuery ->setParameter( "out_trade_no" , "$out_trade_no" ); //商户订单号
// $refundQuery->setParameter("out_refund_no","XXXX");//商户退款单号
// $refundQuery->setParameter("refund_id","XXXX");//微信退款单号
// $refundQuery->setParameter("transaction_id","XXXX");//微信退款单号
//非必填参数,商户可根据实际情况选填
//$refundQuery->setParameter("sub_mch_id","XXXX");//子商户号
//$refundQuery->setParameter("device_info","XXXX");//设备号
//退款查询接口结果
$refundQueryResult = $refundQuery ->getResult();
//商户根据实际情况设置相应的处理流程,此处仅作举例
if ( $refundQueryResult [ "return_code" ] == "FAIL" ) {
echo "通信出错:" . $refundQueryResult [ 'return_msg' ]. "<br>" ;
}
else {
echo "业务结果:" . $refundQueryResult [ 'result_code' ]. "<br>" ;
echo "错误代码:" . $refundQueryResult [ 'err_code' ]. "<br>" ;
echo "错误代码描述:" . $refundQueryResult [ 'err_code_des' ]. "<br>" ;
echo "公众账号ID:" . $refundQueryResult [ 'appid' ]. "<br>" ;
echo "商户号:" . $refundQueryResult [ 'mch_id' ]. "<br>" ;
echo "子商户号:" . $refundQueryResult [ 'sub_mch_id' ]. "<br>" ;
echo "设备号:" . $refundQueryResult [ 'device_info' ]. "<br>" ;
echo "签名:" . $refundQueryResult [ 'sign' ]. "<br>" ;
echo "微信订单号:" . $refundQueryResult [ 'transaction_id' ]. "<br>" ;
echo "商户订单号:" . $refundQueryResult [ 'out_trade_no' ]. "<br>" ;
echo "退款笔数:" . $refundQueryResult [ 'refund_count' ]. "<br>" ;
echo "商户退款单号:" . $refundQueryResult [ 'out_refund_no' ]. "<br>" ;
echo "微信退款单号:" . $refundQueryResult [ 'refund_idrefund_id' ]. "<br>" ;
echo "退款渠道:" . $refundQueryResult [ 'refund_channel' ]. "<br>" ;
echo "退款金额:" . $refundQueryResult [ 'refund_fee' ]. "<br>" ;
echo "现金券退款金额:" . $refundQueryResult [ 'coupon_refund_fee' ]. "<br>" ;
echo "退款状态:" . $refundQueryResult [ 'refund_status' ]. "<br>" ;
}
}
?>
|
相关文章
猜你喜欢
- ASP.NET本地开发时常见的配置错误及解决方法? 2025-06-10
- ASP.NET自助建站系统的数据库备份与恢复操作指南 2025-06-10
- 个人网站服务器域名解析设置指南:从购买到绑定全流程 2025-06-10
- 个人网站搭建:如何挑选具有弹性扩展能力的服务器? 2025-06-10
- 个人服务器网站搭建:如何选择适合自己的建站程序或框架? 2025-06-10
TA的动态
- 2025-07-10 怎样使用阿里云的安全工具进行服务器漏洞扫描和修复?
- 2025-07-10 怎样使用命令行工具优化Linux云服务器的Ping性能?
- 2025-07-10 怎样使用Xshell连接华为云服务器,实现高效远程管理?
- 2025-07-10 怎样利用云服务器D盘搭建稳定、高效的网站托管环境?
- 2025-07-10 怎样使用阿里云的安全组功能来增强服务器防火墙的安全性?
快网idc优惠网
QQ交流群
您的支持,是我们最大的动力!
热门文章
-
2025-06-04 100
-
spring cloud 之 Feign 使用HTTP请求远程服务的实现方法
2025-05-29 13 -
spring boot tomcat jdbc pool的属性绑定
2025-05-29 31 -
2025-05-25 76
-
2025-06-04 77
热门评论