Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Podpięcie API Cashbill PHP
Forum PHP.pl > Forum > PHP
Unstoppable
Witam,

próbuję podpiąć cashbill api do skryptu php. Pobrałem więc ich oficjalne sdk, wrzuciłem na serwer, uzupełniłem o sysID i privKey (dane w 100% prawidłowe), jednak po kliknięciu linku 'Sprzedaz kodu' otrzymuję komunikat ze strony https://ppp.cashbill.pl/pay/get/ o treści: 'Signature mismatch'. Miał ktoś może podobny problem? Być może to ja coś źle robię. Proszę o pomoc.

PS. Zamieszczam tutaj jeszcze wszystkie pliki jakie dostarcza 'sdk':

cashbillCode.php:

  1. <?php
  2. /**
  3.  * 2010-02-19 cashbillCode.php
  4.  *
  5.  * @author Mariusz Chwalba <koder at cashbill dot pl>
  6.  * @copyright 2010 Media Systems
  7.  * @package ppp2
  8.  *
  9.  * Pakiet obsługi sprzedaży kodów internetowych.
  10.  */
  11.  
  12. /**
  13.  * @page intercodes Kody Internetowe
  14.  *
  15.  * Sprzedaż kodów internetowych jest formą pobierania opłat za korzystanie
  16.  * z usług serwisu internetowego umożliwiającą uczestnictwo w Programie
  17.  * Partnerskim Cashbill.
  18.  *
  19.  * Zakup kodu następuje poprzez kanały płatności internetowych.
  20.  *
  21.  * Serwis partnera ma możliwość wygenerowania dowolnego kodu dla klienta.
  22.  * Nowo wygenerowany kod jest nieaktywny. Po dokonaniu płatności
  23.  * system Cashbill informuje partnera o konieczności aktywacji danego kodu.
  24.  *
  25.  * Śledzenie aktywności kodu wykonywane jest przez serwis partnera, umożliwiając
  26.  * świadczenie szerokiej gamy usług.
  27.  */
  28.  
  29. /**
  30.  * Klasa obsługi sprzedaży kodów internetowych.
  31.  * Dostarcza narzędzia do
  32.  * przygotowania nowej transakcji sprzedaży kodów, weryfikacji powiadomienia
  33.  * poprawnej sprzedaży oraz obsługę programu partnerskiego.
  34.  */
  35. class cCashbillCode {
  36. const CASHBILL_URL = 'https://ppp.cashbill.pl/';
  37. protected $sysId, $secret, $encoding;
  38.  
  39. /**
  40. * Inicjalizacja usługi.
  41. * Konieczne parametry identyfikacyjne dla
  42. * punktu płatności można odczytać z panelu cashbill.pl.
  43. *
  44. * @param string $sysId
  45. * - identyfikator serwisu, z panelu cashbill.pl
  46. * @param string $secret
  47. * - klucz tajny serwisu, z panelu cashbill.pl
  48. * @param string $encoding
  49. * - wykorzystywane kodowanie znaków w opisie transakcji. Domyślne UTF-8
  50. */
  51. public function __construct($sysId, $secret, $encoding = 'UTF-8') {
  52. $this->sysId = $sysId;
  53. $this->secret = $secret;
  54. $this->encoding = $encoding;
  55. }
  56.  
  57. /**
  58. * Pomocnicza funkcja generująca losowy kod alfanumeryczny
  59. *
  60. * @param number $length
  61. */
  62. public static function generateCode($length = 8) {
  63. $namespace = strtoupper ( 'abcedfghijkmnpqrstuvwxyz' ); // ograniczona przestrzeń znaków by zapobiec pomyłkom
  64. $code = '';
  65. for($j = 0; $j < $length; $j ++) {
  66. $code .= $namespace [rand ( 1, strlen ( $namespace ) ) - 1];
  67. }
  68. return $code;
  69. }
  70.  
  71. /**
  72. * Pobranie URL rozpoczęcia transakcji sprzedaży kodu.
  73. *
  74. * Do redirectUrl i notifyUrl zostanie automatycznie doklejona zmienna code zawierająca wygenerowany kod
  75. *
  76. * @param string $redirectUrl
  77. * @param string $notifyUrl
  78. * @param float $amount
  79. * @param string $currency
  80. * @param string $ref
  81. * @return string
  82. */
  83. public function getCodeUrl($redirectUrl, $notifyUrl, $amount, $currency = 'PLN', $ref = '') {
  84. $code = self::generateCode ();
  85. $title = 'Kod ' . $code . ' do serwisu ' . $this->sysId;
  86.  
  87. $notifyUrl = self::fillUrl ( $notifyUrl ) . 'code=' . $code;
  88. $redirectUrl = self::fillUrl ( $redirectUrl ) . 'code=' . $code;
  89.  
  90. return $this->getTransactionUrl ( $ref, $amount, $currency, $title, $notifyUrl, $redirectUrl );
  91. }
  92.  
  93. /**
  94. * Uzupełnia adres URL tak, by doklejki (sygnatury, parametry) nie niszczyły formatu
  95. *
  96. * @param string $url
  97. * @return string
  98. */
  99. protected static function fillUrl($url) {
  100. if (strpos ( $url, '?' ) === false) {
  101. $url .= '?';
  102. } else {
  103. if (substr ( $url, - 1 ) != '&')
  104. $url .= '&';
  105. }
  106. return $url;
  107. }
  108.  
  109. /**
  110. * Pobranie URL rozpoczęcia transakcji.
  111. * Wysłanie klienta pod wskazany
  112. * adres URL zainicjuje transakcję.
  113. *
  114. * @param string $ref
  115. * - kod referencyjny programu partnerskiego. Dla serwisów nie uczestniczących w programie partnerskim należy pozostawić pusty.
  116. * @param float $amount
  117. * - cena kodu
  118. * @param string $currency
  119. * - waluta. Dla złotówki: PLN.
  120. * @param string $title
  121. * - tytuł transakcji. Powinien zawierać sprzedawany kod, np. "Kod ASDFQW dla serwisu www.przykład.pl"
  122. * @param string $notifyUrl
  123. * - adres URL na który system Cashbill prześle powiadomienie o dokonaniu transakcji. Powinien zawierać parametry wystarczające do identyfikacji konkretnego kodu ( Przykładowy skrypt odbiorczy w pliku cashbillExampleConfirmation.php ).
  124. * @param string $redirectUrl
  125. * - adres URL na który zostanie przekierowany klient po zakupie kodu. Może zawierać w parametrach kod, co w połączeniu z odpowiednią konstrukcją strony, umożliwi zwolnienie klienta z konieczności ręcznego przepisania kodu do formularza.
  126. */
  127. public function getTransactionUrl($ref, $amount, $currency, $title, $notifyUrl, $redirectUrl) {
  128. // uzuełnienie notifyUrl, by sygnatura nie uszkodziła adresu
  129. $notifyUrl = self::fillUrl ( $notifyUrl );
  130.  
  131. $sign = md5 ( $this->sysId . $ref . $amount . $currency . $title . $notifyUrl . 'bounce-signed' . $redirectUrl . $this->secret );
  132.  
  133. $data = array (
  134.  
  135. 'sysid' => $this->sysId,
  136. 'ref' => $ref,
  137. 'encoding' => $this->encoding,
  138. 'amount' => $amount,
  139. 'currency' => $currency,
  140. 'notifyUrl' => $notifyUrl,
  141. 'notifyMode' => 'bounce-signed',
  142. 'redirectUrl' => $redirectUrl,
  143. 'title' => $title,
  144. 'sign' => $sign
  145. );
  146.  
  147. $url = self::CASHBILL_URL . 'pay/get/?';
  148. foreach ( $data as $key => $value ) {
  149. $url .= urlencode ( $key ) . '=' . urlencode ( $value ) . '&';
  150. }
  151.  
  152. return $url;
  153. }
  154. protected function checkSignature($queryString) {
  155. $sign = substr ( $queryString, - 32 );
  156. $base = substr ( $queryString, 0, - 32 );
  157.  
  158. return md5 ( $base . $this->secret ) == $sign;
  159. }
  160.  
  161. /**
  162. * Sprawdza, czy aktualne żądanie zawiera poprawną sygnaturę
  163. * systemu Cashbill.
  164. *
  165. * @return boolean
  166. */
  167. public function checkNotifyRequest() {
  168. return $this->checkSignature ( $_SERVER ['QUERY_STRING'] );
  169. }
  170.  
  171. /**
  172. * Informuje system Cashbill o przyjęciu potwierdzenia płatności.
  173. */
  174. public function notifySuccess() {
  175. echo 'OK';
  176. }
  177.  
  178. /**
  179. * Informuje system Cashbill o błędzie przy przyjmowaniu potwierdzenia płatności.
  180. *
  181. * @param string $error
  182. */
  183. public function notifyError($error) {
  184. echo 'ERROR: ' . $error;
  185. }
  186. }
  187.  


cashbillInit.php:

  1. <?php
  2. require '../cashbillCode.php';
  3.  
  4. /**
  5.  * @TODO: uzupełnić sysid i privkey serwisu odczytany z panelu administracyjnego CashBill
  6.  */
  7. $cashbill = new cCashbillCode ( 'sysID', 'keyId' );


casbillPaycodeConfirmation.php:

  1. <?php
  2. require 'cashbillInit.php';
  3.  
  4. if ($cashbill->checkNotifyRequest ()) {
  5. $code = $_GET ['code'];
  6. /*
  7. * @TODO: W tym miejscu należa aktywować kod $code
  8. */
  9. $cashbill->notifySuccess ();
  10. } else {
  11. $cashbill->notifyError ( 'Brak autoryzacji potwierdzenia' );
  12. }


cashbillPaycodeTransaction.php:

  1. <?php
  2.  
  3. require 'cashbillInit.php';
  4.  
  5. $baseUrl = 'http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['REQUEST_URI']).'/'; // w produkcyjnym środowisku proszę ustawić stały adres URL
  6.  
  7. $url = $cashbill->getCodeUrl( $baseUrl.'cashbillPaycodeReturn.php', // $redirectUrl - adres, na który wróci klient po dokonaniu zakupu
  8. $baseUrl.'cashbillPaycodeConfirmation.php', // $notifyUrl - adres, na który zostanie wysłane podpisane potwierdzenie transakcji
  9. 9.99 // $amount - kwota transakcji (domyślnie w PLN)
  10. );
  11.  
  12. echo '<a href="'.$url.'">Sprzedaz kodu</a>';


cashbillPaycodeReturn.php:

  1. <?php
  2. $code = $_GET ['code'];
  3.  
  4. echo 'Powrot do serwisu z kodem ' . $code;
eMdzeJ
Witam

sugeruję skontaktować się z działem technicznym CashBill SA
Oni szybciej przeanalizują problem, wskażą prawidłowe rozwiązanie i zasugerują poprawki do naniesienia.

Kontakt pod adresem
http://www.cashbill.pl/O-firmie/CashBill-S.A./Kontakt.html

Pozdrawiam
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.