近来手头有个数字藏品的项目,需要对接第三方汇聚支付,在此整理自己的对接经验,希望对大家有所帮助。
步骤
1,下载sdk
PHP第三方支付汇聚支付新的sdk包,其中包含回调。-PHP文档类资源-CSDN下载
2,调起支付
注意将其中的appid、apiPrivateKey、apiPrivateKey、merchantNo等参数替换成自己的测试/正式参数。
public function unifiedorder($order_no, $user, $totalFee, $order_sale_id,$orderType,$payType) {
// 跳转地址
$return_url = config('base_h5_url'). "pages/order/index";
// SDK 初始化文件加载
vendor('yoppay.YopRequest');
$request = new \YopRequest($this->appid, $this->apiPrivateKey);
$notify_url = 'https://XXX.com/notice.php';
//加入请求参数,参考手册
$request->addParam("parentMerchantNo", $this->parentMerchantNo); //发起方商户编号
$request->addParam("merchantNo", $this->merchantNo); //收款商户编号
$request->addParam("orderId", $order_no); //订单号
$request->addParam("orderAmount", $totalFee); //订单金额
$request->addParam("goodsName", "testgoods"); //商品信息
$request->addParam("notifyUrl", $notify_url);//回调通知地址
$request->addParam("redirectUrl", $return_url);//跳转地址
//提交Post请求,第一个参数为手册上的接口地址
vendor('yoppay.YopRsaClient');
$response = \YopRsaClient::post("/rest/v1.0/trade/order", $request);
// if($response->validSign==1){
// echo "返回结果签名验证成功!\n";
// }
$data=$this->object_array($response);
$token=$data['result']['token'];
$date=date_create();
$cashter = array(
"appKey"=> $this->appid,
"merchantNo" => $this->merchantNo,
"token" => $token,
"timestamp" => date_timestamp_get($date),
"directPayType" => "YJZF",
"cardType" => "",
"userNo" => "",
"userType" => "ID_CARD",
"ext" => "",
);
$getUrl = $this->getUrl($cashter, $this->apiPrivateKey);
$url = "https://cash.yeepay.com/cashier/std?" . $getUrl;
return $url;
}
public function getUrl($response,$private_key){
$content=$this->toString($response);
include_once VENDOR_PATH . '/yoppay/Util/YopSignUtils.php';
$sign=\YopSignUtils::signRsa($content,$private_key);
$url=$content."&sign=".$sign;
return $url;
}
public function toString($arraydata){
$Str="";
foreach ($arraydata as $k=>$v){
$Str .= strlen($Str) == 0 ? "" : "&";
$Str.=$k."=".$v;
}
return $Str;
}
public function object_array($array) {
if(is_object($array)) {
$array = (array)$array;
} if(is_array($array)) {
foreach($array as $key=>$value) {
$array[$key] = YeePay::object_array($value);
}
}
return $array;
}
成功标志:
调起汇聚支付,可以正常支付。
3,回调
public function notify() {
$source = $_REQUEST['response'];
// 解密
$result = \YopSignUtils::decrypt($source,$this->apiPrivateKey,$this->yeeversePublicKey);
// 转化成数组
$result = json_decode($result,'true');
if ($result['status'] == 'SUCCESS') {
// 订单支付成功业务处理
$status = $model->onPaySuccess(PayTypeEnum::YEE_PAY, ['transaction_id' => $result['orderId']]);
if ($status == false) {
log_write('汇聚业务处理失败:'.$model->getError(),'error');
return 'FAILED';
}
return 'SUCCESS';
}
return 'FAILED';
}
成功标志:
订单支付状态更改为已支付状态 。
遇到的问题
1、回调不成功。
首先要看自己的回调地址是否正确,要保证发起支付中回调地址参数传输正确。汇聚支付只需要在发起支付的时候传递回调地址参数即可,不需要在汇聚商户后台配置。
如果回调不成功,就需要考虑自己服务器的问题,需要跟汇聚支付的人对接沟通。详细问题描述,请移步汇聚支付回调不成功问题处理。
2、回调接收到信息无法解密。
这里要考虑服务器配置问题,可能是接收信息被截取。