/** * 生成签名结果 * @param $para_sort 已排序要签名的数组 * return 签名结果字符串 */ function buildRequestMysign($para_sort) { //把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串 $prestr = createLinkstring($para_sort); $mysign = ""; switch (strtoupper(trim($this->alipay_config['sign_type']))) { case "RSA": $mysign = rsaSign($prestr, $this->alipay_config['private_key_path']); break; default: $mysign = ""; } return $mysign; }
/** * 生成签名结果 * @param $para_sort 已排序要签名的数组 * return 签名结果字符串 */ function buildRequestMysign($para_sort) { //把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串 $prestr = createLinkstring($para_sort); // $prestr = 'partner="2088021351438614"&seller_id="*****@*****.**"&out_trade_no="120517540212075"&subject="测试的商品"&body="该测试商品的详细描述"&total_fee="0.01"¬ify_url="http://notify.msp.hk/notify.htm"&service="mobile.securitypay.pay"&payment_type="1"&_input_charset="utf-8"&it_b_pay="30m"&return_url="m.alipay.com"'; $mysign = ""; switch (strtoupper(trim($this->alipay_config['sign_type']))) { case "RSA": $mysign = rsaSign($prestr, $this->alipay_config['private_key_path']); break; default: $mysign = ""; } return $mysign; }
/** * 获取请求签名 * @param $para_temp 请求的参数数组 * @return 签名 */ public function getSign($para_temp) { //除去待签名参数数组中的空值和签名参数 $para_filter = paraFilter($para_temp); //对待签名参数数组排序 $para_sort = argSort($para_filter); //把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串 $prestr = createLinkstring($para_sort); $isSgin = false; switch (strtoupper(trim($this->alipay_config['sign_type']))) { case "RSA": $isSgin = rsaSign($prestr, trim($this->alipay_config['private_key_path'])); break; default: $isSgin = false; } return $isSgin; }
function buildRequestMysign($para_sort) { $prestr = createLinkstring($para_sort); $mysign = ""; switch (strtoupper(trim($this->alipay_config['sign_type']))) { case "MD5": $mysign = md5Sign($prestr, $this->alipay_config['key']); break; case "RSA": $mysign = rsaSign($prestr, $this->alipay_config['private_key_path']); break; case "0001": $mysign = rsaSign($prestr, $this->alipay_config['private_key_path']); break; default: $mysign = ""; } return $mysign; }
/** * 支付宝支付 */ public function alipayAction() { //支付宝提供的加密方式 include_once __DIR__ . '/../../utils/alipay/lib/alipay_core.function.php'; $babyId = $this->devices->getBabyIdByShoeId($this->userInfo['uid'], $this->_sanReq['shoe_id']); if (!$babyId) { $this->_showMsg(self::NON_SHOE, $this->di['flagmsg'][self::NON_SHOE]); } $rel = $this->_checkRelation($this->userInfo['uid'], $babyId['baby_id']); //角色名 if (!empty($rel) && $rel['family_rolename'] != '') { $rolename = $rel['family_rolename']; } else { $rolename = ''; } //获取套餐 $renew = $this->renew->getRenew($serviceId, 1); if (!$renew) { $this->_showMsg(self::NON_PACKAGE, $this->di['flagmsg'][self::NON_PACKAGE]); } //配置 $alipayConf = $this->di->get('sysconfig')['payment']['alipay']; //签名参数 $params['partner'] = $alipayConf['partner']; $params['seller_id'] = $alipayConf['seller_id']; $params['out_trade_no'] = (string) Common::makeOrderSn(); $params['subject'] = $renew['cr_name']; $params['body'] = $renew['cr_detail']; $params['total_fee'] = (string) number_format($renew['cr_real_price'], '2', '.', ''); $params['notify_url'] = $this->di->get['sysconfig']['renewServer'] . $alipayConf['notify_url']; $params['service'] = 'mobile.securitypay.pay'; $params['_input_charset'] = 'utf-8'; $params['payment_type'] = '1'; //生成续费订单,入库 if (($res = $this->renew->renewUpdate($shoeId, $this->userInfo['uid'], $serviceId, $_SERVER['REQUEST_TIME'], 1, $params['out_trade_no'], 1, $params['total_fee'], $params['subject'], $renew['cr_period'], $renew['cr_coins'], $rolename, $babyId['baby_id'], $babyId['dev_imei'])) != self::SUCCESS) { $this->_showMsg($res, $this->di['flagmsg'][$res]); } $data = makeSignstring(argSort(paraFilter($params))); $params['sign'] = urlencode(rsaSign($data, $alipay_config['private_key_path'])); $this->_returnResult(array('flag' => self::SUCCESS, 'data' => urlencode($data . '&sign="' . $params['sign'] . '"&sign_type="RSA"'), 'order_no' => $params['out_trade_no'])); }
public function actionChargeOrder() { // 检查参数 if (!isset($_REQUEST['uid']) || !isset($_REQUEST['pay_type']) || !isset($_REQUEST['token']) || !isset($_REQUEST['goods_id']) || !isset($_REQUEST['pay_type']) || !isset($_REQUEST['payment_type'])) { $this->_return('MSG_ERR_LESS_PARAM'); } $uid = Yii::app()->request->getParam('uid'); $token = trim(Yii::app()->request->getParam('token')); $pay_type = trim(Yii::app()->request->getParam('pay_type')); $app_id = trim(Yii::app()->request->getParam('app_id')); $payment_type = trim(Yii::app()->request->getParam('payment_type', 1)); $goods_id = Yii::app()->request->getParam('goods_id'); if (!Token::model()->verifyToken($uid, $token, $GLOBALS['__APPID'])) { $this->_return('MSG_ERR_TOKEN'); } if (!User::model()->isSetPassword($uid)) { $this->_return('MSG_ERR_UNSET_PASSWORD'); } $goods_info = Common::model()->getGoodsInfo($goods_id); if (!is_array($goods_info)) { $this->_return('MSG_ERR_FAIL_PARAM'); } // 支付订单创建 $out_trade_no = Pay::model()->createOrder($uid, $goods_info, $GLOBALS['__APPID'], $pay_type, $GLOBALS['__CHANNEL'], $GLOBALS['__PLATFORM']); if ($out_trade_no < 0) { $this->_return('MSG_ERR_UNKOWN'); } // 记录Log Log::model()->_pay_log($uid, 'CREATE_ORDER', date('Y-m-d H:i:s'), $out_trade_no); $data['out_trade_no'] = $out_trade_no; $config_arr = Yii::app()->params['alipay_config']; //支付宝充值返回支付宝前段签名 Yii::import('application.extensions.alipay.*'); require_once 'lib/alipay_notify.class.php'; $alipayNotify = new AlipayNotify($config_arr); $price = $goods_info['price'] / 100; $subject = $goods_info['name']; $body = $goods_info['name'] . ", 你值得拥有"; $price = '"' . $price . '"'; $subject = '"' . $subject . '"'; $body = '"' . $body . '"'; if ($app_id) { $app_id = '"' . $app_id . '"'; } /* if($extern_token){ $extern_token = '"'.$extern_token.'"'; } */ /* if($appenv){ $appenv = '"'.$appenv.'"'; } */ if ($payment_type) { $payment_type = '"' . $payment_type . '"'; } /* if($it_b_pay){ $it_b_pay = '"'.$it_b_pay.'"'; } */ /* if($show_url){ $show_url = '"'.urlencode($show_url).'"'; } */ $service = '"mobile.securitypay.pay"'; $partner = '"' . Yii::app()->params['partner'] . '"'; $charset = '"utf-8"'; $notify_url = '"' . urlencode(Yii::app()->params['notifyUrl']) . '"'; $out_trade_no = '"' . $out_trade_no . '"'; $seller_id = '"' . Yii::app()->params['partner'] . '"'; $sign_date = array('seller_id' => $seller_id, 'total_fee' => $price, 'service' => $service, 'partner' => $partner, '_input_charset' => $charset, 'notify_url' => $notify_url, 'out_trade_no' => $out_trade_no, 'subject' => $subject, 'app_id' => $app_id, 'payment_type' => $payment_type, 'body' => $body); $sign_date = paraFilter($sign_date); $sign_date = createLinkstring($sign_date); $private_key_url = '../extensions/alipay/' . $alipayNotify->alipay_config['private_key_path']; $data['sign'] = rsaSign($sign_date, $private_key_url); $data['url'] = $sign_date; $data['notifyUrl'] = Yii::app()->params['notifyUrl']; // 发送返回值 $this->_return('MSG_SUCCESS', $data); }
function creatersa($info) { $rsa = rsaSign($info, dirname(__FILE__) . '/mobilepay/alipaysdk/key/rsa_private_key.pem'); return $rsa; }
function rsaSign($data) { $priKey = "-----BEGIN RSA PRIVATE KEY-----\n生成密钥时获取的私钥字符串,直接使用pem文件的完整字符串\n-----END RSA PRIVATE KEY-----"; $res = openssl_get_privatekey($priKey); openssl_sign($data, $sign, $res); openssl_free_key($res); $sign = base64_encode($sign); $sign = urlencode($sign); return $sign; } // 支付宝合作者身份ID,以2088开头的16位纯数字 $partner = "%支付宝PartnerID%"; // 支付宝账号 $seller_id = '%支付宝账号,通常为邮箱地址%'; // 商品网址 $base_path = urlencode('http://www.dcloud.io/helloh5/'); // 异步通知地址 $notify_url = urlencode('http://demo.dcloud.net.cn/payment/alipay/notify.php'); // 订单标题 $subject = 'DCloud项目捐赠'; // 订单详情 $body = 'DCloud致力于打造HTML5最好的移动开发工具,包括终端的Runtime、云端的服务和IDE,同时提供各项配套的开发者服务。'; // 订单号,示例代码使用时间值作为唯一的订单ID号 $out_trade_no = date('YmdHis', time()); $parameter = array('service' => 'mobile.securitypay.pay', 'partner' => $partner, '_input_charset' => 'UTF-8', 'out_trade_no' => $out_trade_no, 'subject' => $subject, 'payment_type' => '1', 'seller_id' => $seller_id, 'total_fee' => $total, 'body' => $body, 'it_b_pay' => '1d', 'notify_url' => $notify_url, 'show_url' => $base_path); //生成需要签名的订单 $orderInfo = createLinkstring($parameter); //签名 $sign = rsaSign($orderInfo); //生成订单 echo $orderInfo . '&sign="' . $sign . '"&sign_type="RSA"';
function getrsaSign($prestr) { $isSgin = rsaSign($prestr, trim($this->alipay_config['private_key_path'])); return $isSgin; }