У меня точно такая же проблема. Транзакция работает, когда я передаю жестко закодированное значение, и я также использую Angular 6. У меня есть только ввод номера типа и кнопка Paypal. Я использую этот проект для использования Paypal https://github.com/Enngage/ngx-paypal Вот мой код:
component.html [114 ]
component.ts
import { Component, OnInit, Input } from '@angular/core';
import { PayPalConfig, PayPalEnvironment, PayPalIntegrationType } from 'ngx-paypal';
@Component({
selector: 'app-paypal',
templateUrl: './paypal.component.html',
styleUrls: ['./paypal.component.css']
})
export class PaypalComponent implements OnInit {
amount: number;
public payPalConfig?: PayPalConfig;
ngOnInit(): void {
this.initConfig();
}
private initConfig(): void {
this.payPalConfig = new PayPalConfig(PayPalIntegrationType.ClientSideREST, PayPalEnvironment.Sandbox, {
commit: true,
client: {
sandbox: '...',
},
button: {
label: 'paypal',
layout: 'vertical'
},
onAuthorize: (data, actions) => {
console.log('Authorize');
return undefined;
},
onPaymentComplete: (data, actions) => {
console.log('OnPaymentComplete');
console.log(data);
},
onCancel: (data, actions) => {
console.log('OnCancel');
},
onError: err => {
if (typeof this.amount === 'number') {
console.log('NUMBER !!!!!!!!!!');
} else if (typeof this.amount === 'string') {
console.log('STRING !!!!!!!!!!');
}
console.log('Amount : ' + this.amount);
console.log('OnError : ' + err);
},
onClick: () => {
console.log('onClick');
},
validate: (actions) => {
console.log(actions);
},
experience: {
noShipping: true,
brandName: '...'
},
transactions: [{
amount: {
currency: 'EUR',
total: this.amount
}
}]
});
}
}
Спасибо за любую помощь!
То, что Вы просите, очень разумно и существует много способов достигнуть этого.
Лично, когда я делаю это, мне не нравится регистрировать файлы к управлению версиями, которые имеют сгенерированное число сервера сборки в них - оно просто представляет слишком много головных болей при слиянии кода через ответвления, но также и мне нравится, когда известный номер версии используется, когда разработчик делает сборку рабочей станции по сравнению с полученным блоком сервера надлежащей сборки для создания действительно легким сказать им независимо.
Для получения дополнительной информации о том, как мне нравится делать это, смотреть на Сборку TFS Recipies Wiki:
или мое сообщение в блоге по теме
Надежда, которая помогает,
Martin.
Да Вы можете. В какой-то момент, возможно в AfterGet, можно использовать BuildNumber и создать пользовательскую задачу обновить файлы AssemblyInfo.cs в исходном коде.
Мы сцепились в AfterGet и заставили нашу цель быть иждивенцем:
<Target Name="AfterGet" DependsOnTargets="VersionAssemblies" />
Наша Цель VersionAssemblies вытягивает все файлы AssemblyInfo.cs от $ (SolutionRoot):
<CreateItem Include="$(SolutionRoot)\**\AssemblyInfo.cs;">
<Output TaskParameter="Include" ItemName="AssemblyInfos"/>
</CreateItem>
проверяет их:
<Exec Command="$(TfCommand) checkout "AssemblyInfo.cs" -r"
WorkingDirectory="$(MSBuildProjectDirectory)\..\sources" ContinueOnError="true"/>
редактирует их и заменяет версию файла $ (BuildNumber):
<File.Replace Path="%(AssemblyInfos.FullPath)"
NewValue="AssemblyFileVersion("$(BuildNumber)")"
RegularExpression="AssemblyFileVersion\(\"(\d+.\d+.\d+.\d+)\"\)"
IgnoreCase="true"
Force="true"/>
и затем перепроверяет файлы в:
<Exec Command="$(TfCommand) checkin /override:"Automated" /comment:"Update AssemblyInfo files to version number $(BuildNumber) - $(NoCICheckinComment) " /noprompt "AssemblyInfo.cs" /recursive"
WorkingDirectory="$(MSBuildProjectDirectory)\..\sources" ContinueOnError="false"/>
Для замены версий файла я использую Файл. Задача замены, которая идет с задачами Microsoft SDC на CodePlex.
Также отметьте, которые, если у Вас есть сборка, которая инициирована на регистрации при регистрации в файлах AssemblyInfo.cs, удостоверяются, что комментарий включает $ (NoCICheckinComment) как это, заставляет TFS не инициировать другую сборку иначе, Вы закончите в бесконечном цикле сборки.