详解PHP如何接入微信支付

详解PHP如何接入微信支付

2021-09-16 3,159
此资源仅限VIP下载
下载不了?请联系网站客服提交链接错误!
增值服务:

详解PHP如何接入微信支付

阿奇源码默认解压密码为"www.aqiyuanma.com",2021年9月11日前的源码默认解压密码为"www.hnymwl.com"
阿奇官方VIP技术群:483386718,阿奇源码技术交流群:938992858!速奇云-香港云服务器38元/月

一、微信支付分介绍及开通
产品介绍:https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter3_1_0.shtml
接入前准备:https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter3_1_1.shtml
测试号配置:https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter3_1_5.shtml
二、免确认模式开发

参考网址:https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter3_1_3.shtml

步骤1 用户在商户侧下单购买产品或服务,此时,我们需要先对用户的授权状态进行查询
步骤2 引导用户开启授权服务
步骤3 创建支付分订单
步骤4 商户为用户提供服务,待服务结束后,商户调用完结订单接口完结当前订单。
步骤5 收到用户扣款成功通知,业务流程结束
三、SDK相关

官方文档:https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay6_0.shtml
wechatpay-php(推荐):https://github.com/wechatpay-apiv3/wechatpay-php
四、代码示例

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

/**

* Notes: 步骤1 用户在商户侧下单购买产品或服务,此时,我们需要先对用户的授权状态进行

* User: XXX

* DateTime: 2021/7/27 9:59

*/

public function getAuthStatus(string $cid)

{

$openid = $this->getOpenid($cid);

if (!$openid) {

return false;

}

try {

$resp = $this->instance->v3->payscore->permissions->openid->{‘{openid}’}

->get(

[

‘query’  => [

‘appid’      => $this->appid,

‘service_id’ => $this->serviceId,

],

// uri_template 字面量参数

‘openid’ => $openid,

]

);

$res = json_decode($resp->getBody()->getContents(), true);

if ($res[‘authorization_state’] == ‘AVAILABLE’) {

return true;

} else {

return false;

}

} catch (\Exception $e) {

return false;

/*echo($e->getResponse()->getStatusCode());

// 进行错误处理

echo $e->getMessage()->getReasonPhrase(), PHP_EOL;

if ($e instanceof \Psr\Http\Message\ResponseInterface && $e->hasResponse()) {

echo $e->getResponse()->getStatusCode() . ‘ ‘ . $e->getResponse()->getReasonPhrase(), PHP_EOL;

echo $e->getResponse()->getBody();

}*/

}

}

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

/**

* Notes:步骤2 引导用户开启授权服务-获取预授权码

* User: XXX

* DateTime: 2021/7/27 18:37

*/

public function openAuthStatus()

{

try {

$resp = $this->instance->v3->payscore->permissions->post(

[

‘json’ => [

‘service_id’         => $this->serviceId,

‘appid’              => $this->appid,

‘authorization_code’ => $this->getRandStr(12), // 授权协议号,类似订单号

//’notify_url’         => ‘https://weixin.qq.com/’,

]

]

);

$res = json_decode($resp->getBody(), true);

return $res[‘apply_permissions_token‘];

} catch (\Exception $e) {

// 进行错误处理

/*if ($e->hasResponse()) {

echo $e->getResponse()->getBody();

}*/

return false;

}

}

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

/**

* Notes: 步骤3 创建支付分订单

* User: xxx

* DateTime: 2021/7/27 19:21

* @param string $cid     用户ID

* @param string $orderSn 订单号

*/

public function makeOrder(string $cid, string $orderSn)

{

// 订单信息

….

$openid = $this->getOpenid($cid);

if (!$openid) {

return [

‘code’ => -1,

‘msg’  => ‘openid不可以为空’,

];

}

// 异步通知地址,有时候发现莫名的变成了localhost,这里先固定

$notiryUrl = route(‘api.v1.wxpayPointsNotify’);

$json = [

‘out_order_no’         => $orderSn,                                                        // 商户服务订单号

‘appid’                => $this->appid,                                                    // 应用ID

‘service_id’           => $this->serviceId,                                                // 服务ID

‘service_introduction’ => ‘换电费用’,                                                          // 服务信息,用于介绍本订单所提供的服务 ,当参数长度超过20个字符时,报错处理

‘time_range’           => [

‘start_time’ => $startTime, //’20210729160710′,

],

‘risk_fund’            => [

‘name’   => ‘ESTIMATE_ORDER_COST’,         // 风险金名称

‘amount’ => 300,                           // 风险金额 数字,必须>0(单位分)

],

‘attach’               => $orderSn,// 商户数据包

‘notify_url’           => $notiryUrl,

‘openid’               => $openid,// 用户标识

‘need_user_confirm’    => false,// 是否需要用户确认

];

try {

$resp = $this->instance->v3->payscore->serviceorder->post(

[

‘json’ => $json

]

);

$res = json_decode($resp->getBody(), true);

// 入库支付分订单

return [

‘code’ => 0,

‘msg’  => ‘支付分订单创建完成’,

];

} catch (\Exception $e) {

// 进行错误处理

if ($e->hasResponse()) {

$body = $e->getResponse()->getBody();

if ($body) {

return [

‘code’ => -1,

‘msg’  => (string)$body,

];

}

}

return ”;

}

}

完结支付分订单、取消支付分订单、查询支付分订单 类似,这里不再写出来。

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

/**

* Notes: 异步通知

* User: XXX

* DateTime: 2021/8/3 14:20

*/

public function notify()

{

// 获取返回的信息

$responseBody = file_get_contents(“php://input”);

$responseArr = json_decode($responseBody, true);

if ($responseArr) {

$res = AesGcm::decrypt($responseArr[‘resource’][‘ciphertext’], ‘xxxapi密钥’, $responseArr[‘resource’][‘nonce’], $responseArr[‘resource’][‘associated_data’]);

$resArr = json_decode($res, true);

if ($resArr) {

// 记录日志

// 业务逻辑处理

// 订单志记录

} else {

return [

‘code’ => -1,

‘msg’  => ‘析有误’,

];

}

} else {

return [

‘code’ => -1,

‘msg’  => ‘nothing post’,

];

}

}

五、注意事项
严格遵循文档中的参数要求,出现问题第一时间比较传入参数和官方示例的区别
支付分订单必须取消,或完结

资源下载此资源仅限VIP下载,请先
4581324
收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

注:在使用本系统时,使用方必须在国家相关法律法规范围内并经过国家相关部门的授权许可,禁止用于一切非法行为。使用用途仅限于测试、实验、研究为目的,禁止用于一切商业运营,本团队不承担使用者在使用过程中的任何违法行为负责。

阿奇源码 THINKPHP教程 详解PHP如何接入微信支付 https://www.aqiyuanma.com/107973.html

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务

  • 0 +

    访问总数

  • 0 +

    会员总数

  • 0 +

    文章总数

  • 0 +

    今日发布

  • 0 +

    本周发布

  • 0 +

    运行天数

你的前景,远超我们想象
详解PHP如何接入微信支付-海报

分享本文封面