Jdpay.php 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. <?php
  2. namespace app\common\service;
  3. use addons\epay\library\Service;
  4. use jdpay\com\jdjr\pay\demo\common\SignUtil;
  5. use jdpay\com\jdjr\pay\demo\common\TDESUtil;
  6. class Jdpay{
  7. protected $appid;
  8. protected $merchantNo;
  9. protected $desKey;
  10. public function __construct()
  11. {
  12. $this->appid=config('site.appId');
  13. $this->merchantNo=config('site.merchantNo');
  14. $this->desKey=config('site.jd_desKey');
  15. }
  16. public function order($orderNo,$amount,$desc){
  17. $arr=[
  18. 'version'=>'V1.0.0',
  19. 'appId'=>$this->appid,
  20. 'merchantNo'=>$this->merchantNo,
  21. 'orderId'=>$orderNo,
  22. 'amount'=>bcmul($amount,100,0),
  23. 'virtualType'=>'01',
  24. 'sourcePlat'=>'h5',
  25. 'tradeName'=>$desc,
  26. 'outTradeIp'=>request()->ip(),
  27. 'successNotifyUrl'=>Service::notifyUrlJd($orderNo),
  28. 'expireTime'=>'3600',
  29. 'outTradePort'=>(string)request()->port(),
  30. ];
  31. $newArr=$arr;
  32. $key=base64_decode($this->desKey);
  33. foreach ($newArr as $key=>$item){
  34. if(in_array($key,['merchantNo'])){
  35. continue;
  36. }
  37. $newArr[$key]=TDESUtil::encrypt2HexStr($key,$item);
  38. }
  39. $query=[
  40. 'merchantNo'=>$this->merchantNo,
  41. 'cipherJson'=>TDESUtil::encrypt2HexStr($key,json_encode($newArr)),
  42. 'sign'=>SignUtil::signWithoutToHex($arr,[]),
  43. ];
  44. $link='https://payx.jd.com/cashier/h5/saveOrder?'.http_build_query($query);
  45. return [
  46. 'pay_url'=>$link,
  47. 'data'=>$newArr
  48. ];
  49. }
  50. }